在不使用WebSocket的情况下管理服务器上的在线用户

时间:2018-09-28 15:07:45

标签: javascript node.js express

我想显示不使用Websockets的已连接用户的列表。 我想使用http标头

Connection:keep-alive

获得持久的连接。 然后,当客户离开网站时,他们将在 beforeunload 事件上运行侦听器处理程序,以通知服务器客户将要离开列表。 但是,服务器如何才能通知其余已连接的客户端以更新其列表? (请记住,不使用websockets,并且如果可能的话,也不要使客户端向服务器询问任何间隔)

1 个答案:

答案 0 :(得分:0)

因此,使用Connection: keep-alive标头意味着浏览器和服务器将通过一个tcp连接执行多个http请求/响应,而不是为每个http请求打开和关闭tcp连接。但这仍然不允许服务器仅在任何时候推送数据。 要使服务器响应任何内容,客户端仍然需要发出请求。因此,它与实时推送事件并没有真正的关系。

  

,并且在可能的情况下,不让客户端询问服务器的时间间隔

这是不可能的。就像我说的,除非客户端首先请求服务器,否则服务器无法通过http向客户端发送数据。

因此您要么必须对用户列表进行间隔请求

您可以使用http长轮询使其“模拟”从服务器推送。

基本思想是服务器永远不会“完成”对客户端请求的响应,而是将其响应分块发送,而实际上这些分块在客户端将被视为单独的数据。但是此解决方案很容易破解,并且有很多弊端。无论哪种方式,http长轮询都会或多或少地模拟实时推送数据。