gpt4 book ai didi

java - 用Java实现keepalive

转载 作者:行者123 更新时间:2023-11-30 06:36:40 29 4
gpt4 key购买 nike

我正在构建一个客户端-服务器应用程序,我必须在其中实现保活机制以检测客户端是否已崩溃。我在客户端和服务器端都有单独的线程。客户端线程发送一个“ping”然后 hibernate 3 秒,同时服务器读取 BufferedInputStream 并检查是否收到 ping,如果收到则使 ping 计数器等于零,否则它将计数器递增+1,然后服务器线程 hibernate 3 秒,如果 ping 计数器达到 3,则宣布客户端已死。

问题是,当服务器读取输入流时,它是一个阻塞调用,它会阻塞直到收到下一个 ping,无论它延迟多长时间,所以服务器永远不会检测到丢失的 ping。

任何建议,以便我可以读取流的当前值,并且如果传入流上没有任何内容,它也不会阻塞。

谢谢,

最佳答案

Java 1.4 引入了非阻塞 I/O 的思想,以 java.nio 包为代表。这可能就是您所需要的。

参见 this tutorial for how to use non-blocking I/O .

此外,假设这不是家庭作业或学习练习,那么我建议使用更强大的协议(protocol)框架,例如 Apache MinaJBoss Netty ,而不是从头开始构建这些东西。参见 this comparison它们之间的关系,以及为什么要使用它们。

关于java - 用Java实现keepalive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564436/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com