日期:2014-05-17  浏览次数:20668 次

请教关于心跳包,还有怎么判断服务端是否开启的问题?
心跳包,在代码上看,
是不是从服务端定时发信息给客户端的?
然后判断客户端在线??
而在客户端来说,就没有心跳包这个概念??

在客户端上面来看,怎么判断服务端是否异常关闭,或者开启??

目前的话,我是用sendUrgentData这个来判断服务端是否异常关闭,
不知道你们是怎么判断服务端异常关闭的??


还有怎么判断服务端是否开启??
我想实现自动连接服务端,如果用
socket = new Socket("192.168.1.4",1821);
socket.connect();



类似于这种方法的话,我知道是可以实现的,但是
new一个出来,感觉开销挺大,不知道各位有没有更加好的方法??


------解决方案--------------------
要想自动连接你只有每次去new创建这个sock对象,因为只有sock对象创建好了才由输入输出流
------解决方案--------------------
心跳是客户端发给服务器端的,如果是服务器端发给客户端,客户端超过一定数值,服务器的端口不是都不够用?

在客户端上面来看,怎么判断服务端是否异常关闭,或者开启??
如果没有心跳,服务器肯定挂了:网络断了、服务器宕了
如果有心跳,并且可以连接到服务器的服务端口,说明网络和服务进程都没有问题

new一个出来,感觉开销挺大,不知道各位有没有更加好的方法??
new一个没什么开销,一般5s或者15s一次心跳,new和tcp建立的开销相对这点时间来说没什么,反正是后台工作,又不和用户交互,考虑这个开销你想多了
------解决方案--------------------
引用:
Quote: 引用:

要想自动连接你只有每次去new创建这个sock对象,因为只有sock对象创建好了才由输入输出流


哦哦哦,看来也只能是这样,然后还有个问题请教的:

我很奇怪 心跳 这个名词,
是不是就指定时发送些东西给服务端,我目前的实现方式就是,

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,Thread.sleep(500);
3.用socket.sendUrgentData(FF),给服务端,

4.如果服务端异常关闭的话,我就捕捉这个异常。。。
5.循环

我这种算是完成了心跳的机制了吗??
是不是发送sendUrgentData(FF),这种方法来实现心跳机制的??
如果是你的话,你会通过发送什么去确认,服务端异常关闭了??

我觉得心跳这个机制好像很简单,但是好像又很难一样。。。
归根到底,都还不是很懂,求再次指导。。。


心跳就是这样,其实就是利用了socket的超时机制,双方在超时时间内一直保持着通信,这就出现了所谓的长连接的概念
------解决方案--------------------
引用:
Quote: 引用:

心跳是客户端发给服务器端的,如果是服务器端发给客户端,客户端超过一定数值,服务器的端口不是都不够用?

在客户端上面来看,怎么判断服务端是否异常关闭,或者开启??
如果没有心跳,服务器肯定挂了:网络断了、服务器宕了
如果有心跳,并且可以连接到服务器的服务端口,说明网络和服务进程都没有问题

new一个出来,感觉开销挺大,不知道各位有没有更加好的方法??
new一个没什么开销,一般5s或者15s一次心跳,new和tcp建立的开销相对这点时间来说没什么,反正是后台工作,又不和用户交互,考虑这个开销你想多了

谢谢回复,本来有很多都半懂半不懂,被你这一说,学习了不少东西,哈哈。。。
还有那个,对于开销,看来真的是自己想多了。
最后我很奇怪 心跳 这个名词,
是不是就指定时发送些东西给服务端,那我目前的实现方式就是,

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,
3.用socket.sendUrgentData(FF),给