使用socketio心跳的优点/缺点

jhc*_*hen 37 websocket node.js socket.io

Socket.io允许您使用心跳"检查Socket.IO连接的健康状况".究竟什么是心跳,为什么我应该或不应该使用它们?

Mic*_*ley 53

心跳是从客户端发送到服务器(或从服务器到客户端并返回到服务器)的小消息,以定期确认客户端仍处于活动状态.

例如,如果您有一个服务于聊天室的Node.js应用程序,并且用户在几分钟内没有说出任何内容,则无法判断它们是否真的仍然连接.通过以预定间隔(例如,每15秒)发送一次听力,客户端通知服务器它仍然存在.如果自服务器从客户端获得心跳以来已经过了20秒,则可能已断开连接.

这是必要的,因为无法保证通过TCP终止连接 - 如果客户端崩溃,或者其他事情发生,您将不会从客户端收到终止数据包,并且服务器将不知道客户端已断开连接.此外,Socket.IO支持各种其他机制(TCP套接字除外)来传输数据,在这些情况下,客户端不会(或不能)向服务器发送终止消息.

默认情况下,Socket.IO客户端每隔15秒(心跳间隔)向服务器发送心跳,如果服务器在20秒内没有从客户端收到(心跳超时),则会认为客户端已断开连接.

我想不出很多你可能不想使用心跳的平均用例.

  • 在使用无线网络连接的移动应用程序中,心跳间隔不应太短,否则您的电池将快速耗尽(例如,Node.js默认服务器到客户端的心跳间隔约为25秒不是很好).有关详细信息,请参阅[此处](http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine). (4认同)
  • 值得注意的是,间隔和心跳之间的小增量的缺点是在负载下,服务器可能不及时响应心跳包并假设连接已经死亡. (2认同)