正常情況下客戶端中斷TCP連接時,會發送一個FIN包,進行4次斷開握手來通知服務器。但一些異常情況下,如客戶端突然斷電斷網或者網絡異常,服務器可能無法得知客戶端已斷開連接。
尤其是移動網絡,TCP連接非常不穩定,所以需要一套機制來保證服務器和客戶端之間連接的有效性。
swoole擴展本身內置了這種機制,開發者只需要配置一個參數即可啟用。Swoole在每次收到客戶端數據會記錄一個時間戳,當客戶端在一定時間內未向服務器端發送數據,那服務器會自動切斷連接。?(推薦學習:?swoole視頻教程)
使用方法:
$serv->set(array( 'heartbeat_check_interval' => 5, 'heartbeat_idle_time' => 10, ));
上面的設置就是每5秒偵測一次心跳,一個TCP連接如果在10秒內未向服務器端發送數據,將會被切斷。
高級用法:
使用swoole_server::heartbeat()函數手工檢測心跳是否到期。此函數會返回閑置時間超過heartbeat_idle_time的所有TCP連接。程序中可以將這些連接做一些操作,如發送數據或關閉連接。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦