如果连接建立后一段时间内没有收到数据,设置超时关闭 NIO SocketChannel 的最佳方法是什么?
Either:
您正在使用一个Selector
,在这种情况下,您可以选择一个可以使用的超时,如果超时(select(timeout)
返回零)您关闭所有已注册的通道,或者
您正在使用阻塞模式,在这种情况下您可能认为您应该能够调用Socket.setSoTimeout()
在底层套接字上(SocketChannel.socket()
),并捕获SocketTimeoutException
当超时到期时抛出read()
,但你不能,因为它不支持源自通道的套接字,或者
您正在使用非阻塞模式,无需Selector
,这种情况需要改为情况(1)。
所以你要么需要使用案例 (1) 要么java.net.Socket
直接地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)