2011-08-15 226 views

回答

52

心跳信號是指定期從客戶端發送到服務器(或從服務器到客戶端並返回服務器)的小消息,以確認客戶端仍處於活動狀態。例如,如果您有一個Node.js應用程序爲聊天室提供服務,並且用戶在很長時間內不會說任何內容,則無法確定它們是否真的仍然連接。通過以預定間隔(例如,每15秒)發送一次聽力信號,客戶端通知服務器它仍然在那裏。如果它是例如自服務器從客戶端獲取心跳後20秒,它可能已斷開連接。

這是必要的因爲你cannot be guaranteed a clean connection termination over TCP - 如果客戶端崩潰或發生其他事情,您將不會收到來自客戶端的終止數據包,並且服務器不知道客戶端已斷開連接。此外,Socket.IO支持各種其他機制(TCP套接字除外)傳輸數據,在這種情況下,客戶端不會(或不能)向服務器發送終止消息。

默認情況下,Socket.IO客戶端將心跳發送到服務器每隔15秒(心跳間隔),如果服務器沒有從客戶聽到20秒(心跳超時)它會認爲客戶端斷開連接。

我想不出許多平均使用情況,你可能不想使用心跳。

+1

值得澄清爲什麼他們需要?爲什麼服務器沒有通過'onclose'事件/回調檢測到客戶端斷開連接? – leggetter

+0

良好的通話,leggetter。我已經更新了一下。 –

+0

非常明確的更新。乾杯。 – leggetter