Javascript Facebook如何知道某人是否在线
我正在用Node.js(Express framework)和socket.io创建一个实时网站,在某个时候,它必须检测是否有人“在线”(基本上就是有人打开了网页) 我认为Facebook聊天就是一个例子。但背后的工程逻辑是什么Javascript Facebook如何知道某人是否在线,javascript,node.js,sockets,express,redis,Javascript,Node.js,Sockets,Express,Redis,我正在用Node.js(Express framework)和socket.io创建一个实时网站,在某个时候,它必须检测是否有人“在线”(基本上就是有人打开了网页) 我认为Facebook聊天就是一个例子。但背后的工程逻辑是什么 非常感谢 不确定Facebook是如何做到这一点的,但如果你向包含javascript的用户提供一个页面,该页面会以特定的时间间隔(比如每分钟)发出异步请求。然后,当您收到请求时,用户会被标记为在线,超时时间略大于ajax间隔。如果超时在没有另一个ajax请求的情况下过
非常感谢 不确定Facebook是如何做到这一点的,但如果你向包含javascript的用户提供一个页面,该页面会以特定的时间间隔(比如每分钟)发出异步请求。然后,当您收到请求时,用户会被标记为在线,超时时间略大于ajax间隔。如果超时在没有另一个ajax请求的情况下过期,用户将被标记为脱机 您可能会钩住页面加载和页面关闭事件,以便仅在用户加载或离开页面时发送请求。这将需要更少的请求 编辑
我看到您在使用socket io,对此我不太熟悉,但我想您可以使用提供的socket连接/断开事件。客户端定期向服务器发送保持活动的消息,并在客户端JS中实现
如果服务器在某个超时期间未收到保持活动,它可以将用户标记为脱机。当websocket显式关闭时,它也可以这样做。这张来自Facebook的幻灯片()详细解释了它的消息传递系统。该系统有comet(channel)集群,它们与浏览器保持TCP连接,并定期将连接的用户列表推送到状态服务器。因此,如果用户在线或不在线,网页(PHP)可以查询状态服务器。您使用的是什么形式的用户身份验证?这是在登录页面之后。在登录页面上,这是发送到服务器进行数据库用户身份验证的标准POST请求感谢您的回答。我目前正在使用页面加载/关闭事件,但当用户在多个选项卡中打开网页时,它会变得混乱。当用户像crazyyeh一样一直按F5时,它也会出现问题,我想页面关闭事件会导致多个选项卡出现问题。这可能有助于在间隔上ping似乎是一种常见的解决方案