Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Facebook如何知道某人是否在线_Javascript_Node.js_Sockets_Express_Redis - Fatal编程技术网

Javascript 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请求的情况下过

我正在用Node.js(Express framework)和socket.io创建一个实时网站,在某个时候,它必须检测是否有人“在线”(基本上就是有人打开了网页)

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


非常感谢

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

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

编辑


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

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


如果服务器在某个超时期间未收到保持活动,它可以将用户标记为脱机。当websocket显式关闭时,它也可以这样做。

这张来自Facebook的幻灯片()详细解释了它的消息传递系统。该系统有comet(channel)集群,它们与浏览器保持TCP连接,并定期将连接的用户列表推送到状态服务器。因此,如果用户在线或不在线,网页(PHP)可以查询状态服务器。

您使用的是什么形式的用户身份验证?这是在登录页面之后。在登录页面上,这是发送到服务器进行数据库用户身份验证的标准POST请求感谢您的回答。我目前正在使用页面加载/关闭事件,但当用户在多个选项卡中打开网页时,它会变得混乱。当用户像crazyyeh一样一直按F5时,它也会出现问题,我想页面关闭事件会导致多个选项卡出现问题。这可能有助于在间隔上ping似乎是一种常见的解决方案