首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java套接字心跳

Java套接字心跳
EN

Stack Overflow用户
提问于 2013-12-29 08:32:37
回答 2查看 7.7K关注 0票数 1

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

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

代码语言:javascript
复制
                    while (true) { // send heartbeats to client
                    try {
                        socketOut.write(0);
                    } catch (Exception e) {
                        System.out.println("client disconnected");
                        break;
                    }
                }

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-29 08:37:55

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

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

我认为您可以通过让客户端生成一个心跳线程来实现您的目标,该线程在心跳持续时间内处于休眠状态,然后唤醒并向服务器发送心跳ping。客户端上的心跳线程会像客户端一样存活很长时间,它只会循环。无论哪种方式,您的服务器都需要跟踪所有客户端,以便能够轮询它们的心跳,或者使用这种方法,只需跟踪哪些客户端正在主动发送心跳。

票数 3
EN

Stack Overflow用户

发布于 2013-12-29 08:45:37

试试java.util。Timer

代码语言:javascript
复制
Timer t = new Timer();
t.schedule(new TimerTask(){
   @Override
   public void run(){/*...Your task...*/}
}, 1000);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20820912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档