我们有一个用 Java 编写的 RMI 客户端应用程序,它需要定期向服务器应用程序发送“保持 Activity ”消息。我们将其实现为一个单独的心跳线程,它向服务器发送保持 Activity 消息,然后使用 Thread.sleep() hibernate 15 秒。
线程设置为高优先级:
Thread heartbeatThread = new Thread(new HeartbeatRunnable(server));
heartbeatThread.setPriority(Thread.MAX_PRIORITY);
heartbeatThread.start();
但是,当运行客户端的机器使用大量 CPU 时,我们发现心跳丢失,这导致服务器认为我们的客户端应用程序已经死了。
我们在我的主线程中添加了 Thread.yield() 调用,尽管这并没有使问题消失。
有什么方法可以保证在我的应用程序仍在运行时按时发送心跳?
最佳答案
你不能真正保证它。您可以在不同的线程中发送心跳,以防止发送心跳所需的时间被添加到您的延迟中。也可能建议将两次心跳之间的延迟设置为服务器用于确定客户端已死的时间的一半,即如果您的服务器在 15 秒后超时您的客户端,(尝试)每 7.5 秒发送一次心跳。
关于java - 如何保证发送 "stay alive"心跳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676812/