[英]Java server socket data input stream read timeout
我当时有Java服务器,只有一个客户端。
我的建议是创建一个ExecutorService并启动一个线程。
这里有一个示例: http : //docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html
正确的方法(但不是最简单的方法)是使用java.nio.channels.SocketChannel
。 它的read
方法读入ByteBuffer
。 您可以将其与java.nio.channels.Selector
结合使用,以不受阻塞地从多个套接字读取(选择器可帮助您找到哪个套接字有可用数据),但对于您而言,您可能对SocketChannel
感到满意。
但是,使用起来要困难得多-没有InputStream
,您需要管理ByteBuffer
。
另一种选择是启动一个监视程序Thread
,该Thread
在超时期间一直处于休眠状态,如果客户端尚未发送PIN,则关闭Socket
。 关闭插槽将中断读取器的阻塞。
如果您想通过一些更老的问题来帮助您使用SocketChannel,请执行以下操作:
服务器应始终使用读取超时。 您可以在第一次请求和响应后更改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.