Facebook如何知道某人是否在线

时间:2013-08-29 03:21:56

标签: javascript node.js sockets express redis

我正在使用Node.js(Express框架)和socket.io进行实时网站,在某些时候它必须检测某人是否“在线”(基本上如果有人打开了网页)。

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

非常感谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

不确定Facebook究竟是如何做到这一点的,但是如果你向其中有javascript的用户提供一个页面,这会使特定时间间隔的异步请求说出每分钟。然后,当您收到请求时,用户被标记为在线,其超时时间略大于ajax间隔。如果超时到期而没有另一个ajax请求,则用户被标记为脱机。

您可能会挂钩页面加载和页面关闭事件,以便仅在用户加载页面时发送请求或将其保留。这将需要更少的请求。

修改

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

答案 2 :(得分:0)

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

如果服务器在某个超时期限内未收到保持活动状态,则可以将用户标记为脱机。当websocket明确关闭时,它也可以这样做。