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

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

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

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

注意:我正在使用计时器进行辩论,以实现我的1秒延迟,但是我不知道它是否可以工作,或者对于同时连接多个客户端的大型游戏是否有效。

最佳答案

您确定服务器需要轮询客户端以获取心跳,而不是让客户端向服务器发送心跳吗?

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

我认为您可以简单地通过让客户端生成一个心跳线程来实现您的目标,该线程在心跳期间一直处于 hibernate 状态,然后唤醒以将心跳ping发送到服务器。客户端上的心跳线将一直存在,直到客户端运行为止。无论哪种方式,您的服务器都需要跟踪所有客户端,以便能够轮询其心跳,或者使用这种方法,只需跟踪哪些客户端正在积极发送心跳。

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

10-12 03:44