com*_*ose 2 java inputstream keep-alive
我正在构建一个客户端 - 服务器应用程序,我必须实现一个keepalive机制,以检测客户端是否崩溃.我在客户端和服务器端都有单独的线程.客户端线程发送"ping"然后休眠3秒,而服务器读取BufferedInputStream
并检查是否接收到ping,如果是,则使ping计数器等于零,否则它将计数器递增+1,服务器线程然后休眠持续3秒,如果ping计数器达到3,它会将客户端声明为已死.
问题是,当服务器读取输入流时,它是一个阻塞调用,并且它会一直阻塞,直到收到下一个ping,无论它有多延迟,所以服务器永远不会检测到错过的ping.
任何建议,以便我可以读取流的当前值,如果传入流上没有任何内容,它不会阻止.
谢谢,
Java 1.4引入了由java.nio
程序包表示的非阻塞I/O的概念.这可能就是你所需要的.
有关如何使用非阻塞I/O的信息,请参阅本教程.
此外,假设这不是家庭作业或学习练习,那么我建议使用更强大的协议框架,如Apache Mina或JBoss Netty,而不是从头开始构建这些东西.看看它们之间的比较,以及为什么要使用它们.
归档时间: |
|
查看次数: |
1902 次 |
最近记录: |