如果在建立连接后的一段时间内没有接收到数据,那么设置超时以关闭SocketChannel的最佳方法是什么?
发布于 2013-06-27 18:47:28
以下任一项:
Selector,在这种情况下,您有一个可以处理的选择超时,如果它关闭(select(timeout)返回零),您将关闭所有注册的通道,或者您正在使用阻塞模式的SocketChannel.socket())上调用Socket.setSoTimeout(),并捕获在read()期间超时到期时抛出的SocketTimeoutException,但您不能这样做,因为它不支持作为通道发起的套接字。orSelector的非阻塞模式,在这种情况下,您需要更改为case (1)。因此,您要么需要使用case (1),要么直接使用java.net.Socket。
发布于 2017-09-15 16:35:54
我正在寻找同样的推荐,但并不容易找到-在这里分享它。
netty有一个很好的处理程序,叫做: ReadTimeoutHandler。
你可以像这样使用它
channel.pipeline().addLast(new ReadTimeoutHandler(readTimeout));当看不到任何数据执行定义的读取超时时,它将丢弃io.netty.handler.timeout.ReadTimeoutException。
https://stackoverflow.com/questions/17340970
复制相似问题