项目

通用

个人资料

操作

在线用户

模块 mod_useronline

描述

一个模块,通过唯一IP(无Cookie)跟踪在线/活跃用户,包括计数点击量,并链接到(mod_status 服务器统计)。

背景

之前,我用PHP编写了一个模块,它也实现了类似跟踪在线用户的功能。
在某个时候,我意识到它有点浪费资源,于是决定将该模块集成到Lighttpd中。

我开始基于mod_rewrite的代码,使用PCRE来匹配模式,以决定是否跟踪某个页面。
我将代码通过电子邮件发送给Jan进行审查,并希望它能被包含到某个分支中,以便所有人都能使用它。
Jan很快回复并提出了一些建议/问题,这些建议/问题极大地改进了该模块(因为我对Lighttpd的内部工作原理还不太熟悉)。

我的名字是Wojciech(昵称:Wojtek),在线上我使用别名Wojjie。我运营/拥有http://www.game-monitor.com,该网站目前正在运行此模块,也是我上面提到的网站。

如果您想通过电子邮件直接联系我,可以通过以下地址:wojtekATwojjie.com(请注意:我确实收到很多垃圾邮件,因此请在主题中注明[mod_useronline]或[lighttpd],以便您的电子邮件能被注意到,并希望我的垃圾邮件过滤器不会将其拦截)。另一种联系我的方法是加入IRC,在Lighttpd的IRC频道(irc://irc.freenode.net/lighttpd)中挂机,我最有可能在那里。

限制

(代码审查:@gstrauss

  • 按当前代码,仅支持IPv4
  • Bug:当达到useronline.maxips限制后,会发生越界读取
  • 当未启用路径未被访问时,不会发生修剪(因此,如果使用mod_status 服务器统计,将不准确)
  • RFE:模块可以用Lua编写,并由mod_magnet运行
  • RFE:模块可以将数据存储在更高效可搜索的表/树中(如内部array *),并在lighttpd的handle_request_done钩子中更新;不过,届时也应保留飞行中活跃请求的引用计数,并在引用计数从0改变时递增/递减活跃计数。

安装

  1. 下载 mod_useronline.c (https://redmine.lighttpd.ac.cn/attachments/download/197/mod_useronline.c)
  2. 将 mod_useronline.c 复制到 lighttpd 的 src 目录中。
  3. 编辑您的 src/Makefile.am 并在最后一个模块后添加以下内容

    lib_LTLIBRARIES += mod_useronline.la
    mod_useronline_la_SOURCES = mod_useronline.c
    mod_useronline_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
    mod_useronline_la_LIBADD = $(common_libadd)

  1. 返回 lighttpd 根目录,首先执行:aclocal && automake && autoconf,然后执行:make clean; ./configure --enable-maintainer-mode; make; make install
  1. 确保 /usr/local/lib 位于您的 ld.so.conf 文件中,并重建 ld 数据库(使用:ldconfig)。

选项

  • useronline.enable

启用或禁用指定区域的跟踪

默认值:0 [禁用]

示例:useronline.enable = 1

  • useronline.online-age

用户/IP不再被视为在线的秒数

默认值:300

示例:useronline.online-age = 600

  • useronline.active-age

用户/IP不再被视为活跃的秒数(注意:将此值设置高于online_age将使活跃计数与在线计数相同)

默认值:useronline.online-age / 3 = 100

示例:useronline.active-age = 60

  • useronline.max-ips

要跟踪的最大IP数量(注意:如果达到此限制,服务器将不再跟踪新用户/IP)

内存使用:16 * max-ips (在64位系统上)

默认值:1024

示例:useronline.max-ips = 4096

  • useronline.status-name

与服务器统计中显示的变量关联的名称(如果未设置,则不报告)
!!注意:下面的链接代码没有实现此功能;也许早期版本有!!

默认值:未设置

示例:useronline.status-name = "myWonderfulSite"

输出/结果

配置正确后,您会注意到一些新的环境变量可供使用。在PHP中,您可以像这样输出在线用户数量

<?php echo $_ENV['USERS_ONLINE'] ?>

以下是此模块生成的环境变量的当前列表

  • users_online

在线用户数量(上次点击时间距今不超过 online_age 秒的IP)

  • users_active

活跃用户数量(上次点击时间距今不超过 min(online_age, active_age) 秒的IP)

  • user_hits

当前IP在线/活跃期间的点击量

  • users_online_age

用户仍被视为在线的秒数(仅报告当前设置)

  • users_active_age

用户仍被视为活跃的秒数(仅报告当前设置)

  • users_online_max_ips

跟踪的最大IP数量(仅报告当前设置)

  • users_online_id

站点/条件ID,跟踪数据所在位置(将来可能用于链接)

服务器统计

如果设置了useronline.status_name,该模块将向状态计数器报告,这些计数器将显示在mod_status 服务器统计
!!注意:下面的链接代码没有实现此功能;也许早期版本有!!

示例:(使用:useronline.status_name = "myWonderfulSite"

useronline.myWonderfulSite.active-age: 100
useronline.myWonderfulSite.id: 9
useronline.myWonderfulSite.max-ips: 4096
useronline.myWonderfulSite.online-age: 300
useronline.myWonderfulSite.users-active: 110
useronline.myWonderfulSite.users-online: 296

前4行报告设置,后2行报告当前计数器。

您会看到一个ID号,这是该站点/条件数据存储的ID。将来它可能用于将多个站点/条件链接在一起,以使用相同的计数器,从而更轻松地统计跨多个域的在线用户。

下载

适用于 1.4.x:2006年09月08日 (月/日/年)

查看:https://redmine.lighttpd.ac.cn/attachments/197/mod_useronline.c

下载:https://redmine.lighttpd.ac.cn/attachments/download/197/mod_useronline.c

下载:(更新链接)参见 #840 的附件

gstrauss近2年前 更新 · 35 次修订