socket 心跳

若是本身去實現心跳功能其實最土的辦法是隔必定時間向服務端發送一個心跳包,而後服務端若是收到了,服務端就發送一個響應信號,若是客戶端在必定的時間間隔內取得了這個響應,那麼鏈接是正常的,若是沒有取得,那麼重連這個socket.
我想若是JDK已經實現了這個功能的話,那我就不必本身再去造輪子了。

參考了一下網上的資料,說是socket.setKeepAlive(true)就實現了心跳包的發送功能,我不知道這個API每隔多少時間去發送一次,仍是這種用法有些誤解,我假定這種用法是對的,那麼,心跳時間間隔我本身實現:
在Client中

心跳線程中的
java

Java code
 
Socket socket = Socket( " 127.0.0.1 " , 8080 ); socket.setKeepAlive( true );



run裏以下實現,每隔60秒觸發一下, socket

Java code
 
public void run{ while ( true ){ if (socket.getKeepAlive){ System.out.println( " Client connect to Server is OK " ); } else { socket = soket( " 127.0.0.1 " , 8080 ); } try { Thread.sleep( 60000 ); } catch (InterruptedException e) { e.printStackTrace(); } } }
爲 TCP 套接字設置 keepalive 選項時,若是在 2 個小時(注:實際值與實現有關)內在任意方向上都沒有跨越套接字交換數據,則 TCP 會自動將 keepalive 探頭髮送到同位體。此探頭是同位體必須響應的 TCP 段。 指望的響應爲如下三種之一: 1. 同位體經過指望的 ACK 響應。不通知應用程序(由於一切正常)。在另外一個 2 小時的不活動時間事後,TCP 將發送另外一個探頭。 2. 同位體經過 RST 響應,通知本地 TCP 同位體主機已崩潰並從新啓動。套接字被關閉。 3. 同位體沒有響應。套接字被關閉。 此選項的目的是檢測同位體主機是否崩潰。 僅對 TCP 套接字(SocketImpl)有效。 更多說明參見 java.net.SocketOptions 接口。
相關文章
相關標籤/搜索