首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook如何知道某人是否在线

问Facebook如何知道某人是否在线
EN

Stack Overflow用户
提问于 2013-08-29 11:21:56
回答 3查看 3.1K关注 0票数 2

我正在做一个使用Node.js (快速框架)和socket.io的实时网站,在某种程度上它必须检测是否有人在线(这基本上是如果有人打开了网页)。

我认为Facebook chat就是一个很好的例子。但是它背后的工程逻辑是什么呢?

非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2013-08-29 18:05:09

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

票数 1
EN

Stack Overflow用户

发布于 2013-08-29 11:44:18

我不确定Facebook是如何做到这一点的,但如果你向用户提供一个包含javascript的页面,这会以特定的时间间隔发出异步请求,比如每分钟一次。然后,当您收到请求时,用户被标记为在线,超时时间略大于ajax间隔。如果在没有其他ajax请求的情况下超时,则将用户标记为离线。

您可以挂接到页面加载和页面关闭事件,以便仅在用户加载或离开页面时发送请求。这将需要更少的请求。

编辑

我看到您在使用socket io,我对此不是很熟悉,但我想您可以使用提供的socket连接/断开事件。

票数 0
EN

Stack Overflow用户

发布于 2013-08-29 11:57:02

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

如果服务器在某个超时时间内没有接收到keep-alive,它可以将用户标记为离线。它还可以在显式关闭websocket时执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18501788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档