Facebook如何知道某人是否在线

我正在做一个Node.js(Express框架)和socket.io的实时网站,在某些时候,它必须检测是否有人在线(这基本上是有人打开网页)。

我认为Facebook聊天就是这样的一个例子。 但是它背后的工程逻辑是什么?

非常感谢!

来自Facebook的这个幻灯片( http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf )详细解释了它的消息系统。 系统具有彗星(通道)群集,与浏览器保持TCP连接,并将连接的用户列表定期推送到Presence服务器。 因此,如果用户在线,网页(PHP)可以查询Presence服务器。

不确定Facebook是如何做到这一点的,但是如果您向拥有JavaScript的用户提供页面,这会使得每隔一段时间以特定间隔发出asynchronous请求。 然后,当您收到一个请求时,用户在线标记的时间稍大于ajax间隔。 如果超时没有另一个Ajax请求,用户被标记为离线。

您可能会挂钩页面加载和页面closures事件,以便只有当用户加载页面或离开时发送请求。 这将需要较less的请求。

编辑

我看到你使用套接字io我不是很熟悉这个,但我想你可以使用提供的套接字连接/断开事件。

客户端定期向服务器发送保活消息,在客户端JS中实现。

如果服务器在某个超时时间内没有收到保持活动状态,则可以将用户标记为离线。 当websocket明确closures时,它也可以这样做。