2012-02-02 35 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,非阻塞,初始化连接等)。