通常,有兩種發(fā)送心跳數(shù)據(jù)包的方法:
方法1:由應用程序?qū)颖旧韺崿F(xiàn)的心跳數(shù)據(jù)包
應用程序發(fā)送心跳數(shù)據(jù)包以檢查連接是否正常。
常規(guī)方法是:服務器處于Timer事件中,定期向客戶端發(fā)送可識別的簡短數(shù)據(jù)包,然后啟動一個低級線程,在該線程中不斷檢測到客戶端的反饋。
如果在一定時間內(nèi)未收到客戶的反饋,則認為客戶離線。 同樣,如果客戶端在一定時間內(nèi)未收到服務器的心跳數(shù)據(jù)包,則認為連接已丟失。
方法2:TCP的KeepAlive機制
由于一臺服務器可能連接到多個客戶端,因此用戶在應用程序?qū)訉崿F(xiàn)了心跳包,這將導致更多代碼,這有點 復雜,但是使用TCP / IP協(xié)議層的內(nèi)置KeepAlive函數(shù)實現(xiàn)心跳功能要簡單得多。 無論是服務器還是客戶端,一方打開KeepAlive功能后,都會在指定的時間內(nèi)自動向另一方發(fā)送心跳包,另一方在收到心跳包后會自動回復 我仍然在線的聚會。
由于KeepAlive功能需要消耗額外的帶寬和流量,因此默認情況下,TCP協(xié)議層不會啟用KeepAlive功能。
盡管這很瑣碎,但在基于流量的環(huán)境中卻增加了成本。
此外,如果KeepAlive設置不合理,則可能是由于短期網(wǎng)絡波動導致無法正常運行的TCP連接斷開而引起的。
默認的KeepAlive超時需要7,200,000
MilliSeconds,即2小時,檢測次數(shù)是5次。 對于許多服務器端應用程序,2小時的空閑時間太長。
因此,我們需要手動啟用KeepAlive功能并設置合理的KeepAlive超時參數(shù)。
心跳數(shù)據(jù)包機制:
之所以將心跳數(shù)據(jù)包稱為心跳數(shù)據(jù)包,是因為它像心跳一樣定期發(fā)送,以告知服務器客戶端仍在運行。 實際上,這是保持長時間的連接。
至于該數(shù)據(jù)包的內(nèi)容,沒有特殊規(guī)定,但通常是很小的數(shù)據(jù)包或僅包含標頭的空數(shù)據(jù)包。
在TCP機制中,有一個心跳包機制,它是TCP選項:SO_KEEPALIVE。 系統(tǒng)默認設置為2小時的心跳頻率。
但是它無法檢查計算機是否已關閉電源,網(wǎng)絡電纜是否已拔出以及防火墻是否損壞。 而且邏輯層可能不那么容易處理斷開連接。
通常,如果僅用于保持活動狀態(tài)就可以。
心跳包通常是通過在邏輯層發(fā)送空的回顯包來實現(xiàn)的。 在下一個計時器中,空包以一定間隔發(fā)送到客戶端,然后客戶端將相同的空包反饋回去。 如果服務器在一定時間內(nèi)沒有收到客戶端發(fā)送的反饋信息包,則只會確認Said被丟棄。 實際上,要確定斷開連接,您只需要發(fā)送或接收。 如果結(jié)果為零,則斷開連接。 但是,在長時間連接下,很長時間可能沒有數(shù)據(jù)交換。 從理論上講,此連接始終處于連接狀態(tài),但實際上,很難知道中間節(jié)點是否發(fā)生故障。 更糟糕的是,某些節(jié)點(防火墻)將在一定時間內(nèi)自動斷開沒有數(shù)據(jù)交互的連接。
這時,我們需要心跳包來保持長連接并保持活動狀態(tài)。
知道斷開連接后,服務器邏輯可能需要做一些事情,例如斷開連接后的數(shù)據(jù)清理,重新連接...當然,在軟件開發(fā)過程中,邏輯層自然需要根據(jù) 實際需求。
做吧
通常,心跳包主要用于長連接的保持活動和斷開連接處理。 在一般應用中,判斷時間為30-40秒。
如果要求確實很高,則當客戶端數(shù)量不大時,可以將其設置為大約15-20秒。
心跳檢測步驟:
客戶端以固定的時間間隔向服務器發(fā)送檢測數(shù)據(jù)包
2.客戶端發(fā)送數(shù)據(jù)包時,它將啟動超時計時器
3。 服務器接收當?shù)竭_檢測數(shù)據(jù)包時,它應以數(shù)據(jù)包 響應。
4.如果客戶端從服務器收到響應數(shù)據(jù)包,則服務器正常,刪除超時計時器 。
5.如果客戶端的超時計時器 過期,它仍然沒有收到響應包,服務器已關閉通常,有兩種發(fā)送心跳數(shù)據(jù)包的方法:
方法1:由應用程序?qū)颖旧韺崿F(xiàn)的心跳數(shù)據(jù)包
應用程序發(fā)送心跳數(shù)據(jù)包以檢查連接是否正常。
常規(guī)方法是:服務器處于Timer事件中,定期向客戶端發(fā)送可識別的簡短數(shù)據(jù)包,然后啟動一個低級線程,在該線程中不斷檢測到客戶端的反饋。
如果在一定時間內(nèi)未收到客戶的反饋,則認為客戶離線。 同樣,如果客戶端在一定時間內(nèi)未收到服務器的心跳數(shù)據(jù)包,則認為連接已丟失。
方法2:TCP的KeepAlive機制
由于一臺服務器可能連接到多個客戶端,因此用戶在應用程序?qū)訉崿F(xiàn)了心跳包,這將導致更多代碼,這有點 復雜,但是使用TCP /
IP協(xié)議層的內(nèi)置KeepAlive函數(shù)實現(xiàn)心跳功能要簡單得多。
無論是服務器還是客戶端,一方打開KeepAlive功能后,都會在指定的時間內(nèi)自動向另一方發(fā)送心跳包,另一方在收到心跳包后會自動回復
我仍然在線的聚會。 由于KeepAlive功能需要消耗額外的帶寬和流量,因此默認情況下,TCP協(xié)議層不會啟用KeepAlive功能。
盡管這很瑣碎,但在基于流量的環(huán)境中卻增加了成本。
此外,如果KeepAlive設置不合理,則可能是由于短期網(wǎng)絡波動導致無法正常運行的TCP連接斷開而引起的。
默認的KeepAlive超時需要7,200,000
MilliSeconds,即2小時,檢測次數(shù)是5次。 對于許多服務器端應用程序,2小時的空閑時間太長。
因此,我們需要手動啟用KeepAlive功能并設置合理的KeepAlive超時參數(shù)。
心跳數(shù)據(jù)包機制:
之所以將心跳數(shù)據(jù)包稱為心跳數(shù)據(jù)包,是因為它像心跳一樣定期發(fā)送,以告知服務器客戶端仍在運行。 實際上,這是保持長時間的連接。
至于該數(shù)據(jù)包的內(nèi)容,沒有特殊規(guī)定,但通常是很小的數(shù)據(jù)包或僅包含標頭的空數(shù)據(jù)包。
在TCP機制中,有一個心跳包機制,它是TCP選項:SO_KEEPALIVE。 系統(tǒng)默認設置為2小時的心跳頻率。
但是它無法檢查計算機是否已關閉電源,網(wǎng)絡電纜是否已拔出以及防火墻是否損壞。 而且邏輯層可能不那么容易處理斷開連接。
通常,如果僅用于保持活動狀態(tài)就可以。
心跳包通常是通過在邏輯層發(fā)送空的回顯包來實現(xiàn)的。 在下一個計時器中,空包以一定間隔發(fā)送到客戶端,然后客戶端將相同的空包反饋回去。
如果服務器在一定時間內(nèi)沒有收到客戶端發(fā)送的反饋信息包,則只會確認Said被丟棄。
實際上,要確定斷開連接,您只需要發(fā)送或接收。 如果結(jié)果為零,則斷開連接。 但是,在長時間連接下,很長時間可能沒有數(shù)據(jù)交換。
從理論上講,此連接始終處于連接狀態(tài),但實際上,很難知道中間節(jié)點是否發(fā)生故障。
更糟糕的是,某些節(jié)點(防火墻)將在一定時間內(nèi)自動斷開沒有數(shù)據(jù)交互的連接。 這時,我們需要心跳包來保持長連接并保持活動狀態(tài)。
知道斷開連接后,服務器邏輯可能需要做一些事情,例如斷開連接后的數(shù)據(jù)清理,重新連接...當然,在軟件開發(fā)過程中,邏輯層自然需要根據(jù) 實際需求。
做吧
通常,心跳包主要用于長連接的保持活動和斷開連接處理。 在一般應用中,判斷時間為30-40秒。
如果要求確實很高,則當客戶端數(shù)量不大時,可以將其設置為大約15-20秒。
心跳檢測步驟: 1.客戶端以固定的時間間隔向服務器發(fā)送檢測數(shù)據(jù)包 2.客戶端發(fā)送數(shù)據(jù)包時,它將啟動超時計時器 3。 服務器接收當?shù)竭_檢測數(shù)據(jù)包時,它應以數(shù)據(jù)包 響應。4.如果客戶端從服務器收到響應數(shù)據(jù)包,則服務器正常,刪除超時計時器 。5.如果客戶端的超時計時器 過期,它仍然沒有收到響應包,服務器已關閉