在服务器端,对于websockets,已经有一个ping / pong实现,其中服务器发送ping并且客户端使用pong回复让服务器节点是否连接了客户端。但是没有反向实现的东西让客户知道服务器是否仍然连接到它们。
我读过两种方法:
您可以尝试在客户端找出服务器是否仍在使用任一方法在线。第一个您将向服务器发送流量,而第二个您将从服务器发送流量。两者似乎都很容易实现,但我不确定哪种方式更有效/更具成本效益。
答案 0 :(得分:1)
服务器上传速度高于客户端上传速度,但服务器CPU是一种昂贵的资源,而客户端CPU相对便宜。将逻辑卸载到客户端是一种更具成本效益的方法......
话虽如此,服务器必须实现此特定逻辑(实际上,所有ping
/ timeout
逻辑),否则它们可能会留下"half-open" sockets耗尽资源但未与任何客户连接。
请记住,套接字(文件描述符)是有限的资源。即使没有流量,它们不仅会使用内存,而且会在资源最大化时阻止新客户端连接。
因此,服务器必须使用超时或实施ping
清除死套接字。
我不是node.js
专家,但是这种类型的逻辑应该使用Websocket协议ping
而不是您的应用程序来实现。您应该查看node.js
服务器/ websocket框架并检查如何启用ping
- 。
您应该设置pings
以适应您的特定环境。即,如果您在Heroku上托管,则Heroku将实施约55秒的超时,并且应在此超时发生之前发送ping
。