使用socketio心跳的优点/缺点

时间:2011-08-15 03:07:17

标签: node.js websocket socket.io

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

1 个答案:

答案 0 :(得分:53)

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

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

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

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

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