Java 套接字心跳

标签 java sockets

我正在开发一个使用套接字的程序,我想每秒向我的客户端发送一次心跳,以检查它们是否仍处于连接状态。

我如何有效地做到这一点?

                    while (true) { // send heartbeats to client
                    try {
                        socketOut.write(0);
                    } catch (Exception e) {
                        System.out.println("client disconnected");
                        break;
                    }
                }

那是我当前的代码,但是 while 循环弄乱了我所有其他的客户端。这使他们无法连接到游戏(服务器套接字)。如何在不影响游戏和其他客户端的情况下完成心跳?

注意:我一直在讨论使用计时器来实现我的 1 秒延迟,但我不知道它是否有效,也不知道它对于同时连接许多客户端的大型游戏是否有效.

最佳答案

您确定服务器需要轮询客户端的心跳信号而不是让客户端向服务器发送心跳信号吗?

一般来说,服务器会连接到套接字,等待接受客户端连接,然后在单独的线程上处理客户端请求。

我认为您只需让客户端生成一个心跳线程,该线程在心跳期间 hibernate ,然后唤醒并向服务器发送心跳 ping,就可以实现您的目标。只要客户端存在,客户端上的心跳线程就会存在,它只会循环。无论哪种方式,您的服务器都需要跟踪所有客户端,以便能够轮询它们的心跳,或者使用这种方法,只需跟踪哪些客户端正在主动发送心跳。

关于Java 套接字心跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820912/

相关文章:

java - 在 C++/JNI 中将 vector 转换为作业?

java - Swing 问题绘制 2 个图像

python - 是否有关于使用 python 进行端口转发的简单描述?

mysql - Ruby on Rails database.yml 中的套接字声明是什么?

java - PHP Socket Java 消息交换

java - 如何使用 Struts2 从 jsp 文件更新数组列表

java - Java 中的线程私有(private)列表

Python TCP 服务器向所有客户端发送消息

java - 在java中制作LinkedList的深拷贝

macos - 重启 mosquitto 代理