如何知道有多少并发用户在php中使用我的应用程序?

如何知道有多少并发用户在php中使用我的应用程序?,php,Php,我有一个php网页,但我想显示有多少用户目前在线。。。。 我怎样才能做到?多谢各位 您必须保存唯一IP访问者的上次访问。(如果您想通过IP获取) 之后,选择在过去100秒内最后一次访问您的站点的所有人(示例) 您必须保存唯一IP访问者的最后一次访问。(如果您想通过IP获取) 之后,选择在过去100秒内最后一次访问您的站点的所有人(示例) 有些值得考虑的问题是。它是一个Apache模块,用于创建一个简单的HTML页面,其中包含详细信息(其中之一是活动客户端/请求的数量)。如果您无法访问数据库,或者

我有一个php网页,但我想显示有多少用户目前在线。。。。
我怎样才能做到?多谢各位

您必须保存唯一IP访问者的上次访问。(如果您想通过IP获取)

之后,选择在过去100秒内最后一次访问您的站点的所有人(示例)


您必须保存唯一IP访问者的最后一次访问。(如果您想通过IP获取)

之后,选择在过去100秒内最后一次访问您的站点的所有人(示例)


有些值得考虑的问题是。它是一个Apache模块,用于创建一个简单的HTML页面,其中包含详细信息(其中之一是活动客户端/请求的数量)。如果您无法访问数据库,或者不希望增加每次用户请求页面时调用数据库的开销,那么可以让PHP解析mod_status创建的状态文件,以获取活动客户端的数量。对于安全性,您可能想考虑用一些改写规则从普通用户隐藏状态文件。它是一个Apache模块,用于创建一个简单的HTML页面,其中包含详细信息(其中之一是活动客户端/请求的数量)。如果您无法访问数据库,或者不希望增加每次用户请求页面时调用数据库的开销,那么可以让PHP解析mod_status创建的状态文件,以获取活动客户端的数量。对于安全性,您可能想考虑用重写规则从普通用户隐藏状态文件。

< P>计数活动会话的数量可能是实现您想要的最好方式。

您可以使用PHP的session\u set\u save\u handler()函数设置一些自定义代码,这些代码将在创建或销毁新用户会话时运行,并让这些自定义代码维护一个存储当前活动会话计数的应用程序范围变量


计算活动会话的数量可能是做你想做的事情的最好方法

您可以使用PHP的session\u set\u save\u handler()函数设置一些自定义代码,这些代码将在创建或销毁新用户会话时运行,并让这些自定义代码维护一个存储当前活动会话计数的应用程序范围变量


前两种解决方案甚至是实时的。我的偏好是第二,因为那时我有最多的控制权。我实现的顺序是2,1,3,4

1) 托管解决方案推送器 最好的解决方案是使用高效的传输(例如长轮询或WebSocket),它可以保持连接的开放性。遗憾的是,在使用PHP/Apache时,这存在扩展问题。幸运的是,您可以使用诸如Pusher之类的托管解决方案。Pusher还提供免费计划,但并发连接限制为20。这意味着您不能免费使用此解决方案,如果您认为您将有超过20个并发用户同时在线。如果没有,您可以使用来有效地检测用户数量

2) 使用 使用socket.io自己托管它。为此,您需要编译node.js和redis并使用。在socket.io中实现这一点非常简单。但请记住,如果用户打开多个选项卡/窗口访问您的页面,而您没有检测到这一点,则您的计数可能会被关闭。在
connection
event
join
room
count
上,例如刚刚发送的每个浏览器(会话)都是唯一的。您应该将此会话id存储在数据库中。我会使用,因为它是疯狂的快速和易于使用。使用将数字存储在redis集合中。如果sadd返回1,则您知道该会话尚未建立连接。如果没有,那么在不同的选项卡/窗口中已经存在到socket.io的连接,您可以断开该连接。您还应该获取使用的会话ID的数量,并使用
socket.broadcast.to('count').send('>')将它们发送回所有连接的用户

3) 仅使用redis p.S:我没时间了,我想在有更多时间时改进答案。

当不使用高效传输时,数字会有一点下降。但这就是我将如何实现这一点。使用添加要设置的会话_id()。还将time()与session_id()放在键中,以跟踪用户何时连接。例如,如果我超过3分钟,您就会知道会话不再连接。要使会话保持活动状态,请每两分钟将会话_id()发送到服务器。请注意,如果用户打开更多窗口/选项卡,您将不得不处理更多请求,但您可以使用cookie跟踪打开的窗口数量。您还必须跟踪过期会话并将其删除

4) 使用您的数据库(PDO)
现在我没有时间回答这个问题,但我会更新它。

前两个解决方案甚至是实时的。我的偏好是第二,因为那时我有最多的控制权。我实现的顺序是2,1,3,4

1) 托管解决方案推送器 最好的解决方案是使用高效的传输(例如长轮询或WebSocket),它可以保持连接的开放性。遗憾的是,在使用PHP/Apache时,这存在扩展问题。幸运的是,您可以使用诸如Pusher之类的托管解决方案。Pusher还提供免费计划,但并发连接限制为20。这意味着您不能免费使用此解决方案,如果您认为您将有超过20个并发用户同时在线。如果没有,您可以使用来有效地检测用户数量

2) 使用 使用socket.io自己托管它。为此,您需要编译node.js和redis并使用。在socket.io中实现这一点非常简单。但请记住,如果用户打开多个选项卡/窗口访问您的页面,而您没有检测到这一点,则您的计数可能会被关闭。在
connection
event
join
room
count
上,例如刚刚发送的每个浏览器(会话)都是唯一的。你应该
$query = "SELECT count(1) FROM unique_users WHERE last_click > ".(time() - 100);