在建立连接后,如果一定时间内未收到任何数据,如何设置超时以关闭NIO SocketChannel?
在建立连接后,如果一定时间内未收到任何数据,如何设置超时以关闭NIO SocketChannel?
要么:
您正在使用一个选择器(Selector
),在这种情况下,您有一个可供调整的选择超时时间,如果超时了(select(timeout)
返回0),您需要关闭所有已注册的通道。
您正在使用阻塞模式,在这种情况下,您可能认为可以在底层套接字(SocketChannel.socket()
)上调用Socket.setSoTimeout()
并捕获在read()
期间超时过期时抛出的SocketTimeoutException
,但事实并非如此,因为对于作为通道生成的套接字,它不受支持。
您正在使用无阻塞模式而没有选择器,在这种情况下,您需要转换到情况(1)。
因此,您需要使用情况(1)或直接使用java.net.Socket
。
channel.pipeline().addLast(new ReadTimeoutHandler(readTimeout));