2012-02-02 45 views
0

我正在開發一箇中間件應用程序,該應用程序創建並維護與多個服務器的TCP/IP連接。如果應用程序檢測到連接已丟失,它將嘗試重新連接定時器,直到連接重新建立。Java NIO套接字應用程序:重用SocketChannel還是丟失連接?

應用程序在非阻塞模式下使用java.nio.SocketChannel對象,使用Selector/SelectionKey來處理套接字事件。

一旦連接丟失,最好扔掉當前的SocketChannel對象,並創建一個新的重新連接(也得到一個新的SelectionKey),或重用相同的SocketChannel和SelectionKey(我猜是無效的直到連接再次建立)?

+0

簡單地說:你無法重用SocketChanngel – bestsss 2012-02-02 21:29:01

+0

注意到。謝謝!讓我感到驚訝,但即使連接丟失,SocketChannel仍會報告isConnected()。 – 2012-02-02 22:34:48

+0

除非關閉,否則只要建立了連接,isConnected()將返回true。獲得異常或接收EOF(-1)後,關閉該通道。 – bestsss 2012-02-02 23:03:35

回答

2

你必須把它扔掉。當連接丟失時,您必須關閉端口上的SocketChannel以正確清理連接。如果你想嘗試重新連接,那麼就做第一次你做的(createSocket,非阻塞,初始化連接等)。