当前位置:编程学习 > JAVA >>

请教关于心跳包,还有怎么判断服务端是否开启的问题?

心跳包,在代码上看,
是不是从服务端定时发信息给客户端的?
然后判断客户端在线??
而在客户端来说,就没有心跳包这个概念??

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

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


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


类似于这种方法的话,我知道是可以实现的,但是
new一个出来,感觉开销挺大,不知道各位有没有更加好的方法??
--------------------编程问答-------------------- 要想自动连接你只有每次去new创建这个sock对象,因为只有sock对象创建好了才由输入输出流 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 心跳是客户端发给服务器端的,如果是服务器端发给客户端,客户端超过一定数值,服务器的端口不是都不够用?

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

new一个出来,感觉开销挺大,不知道各位有没有更加好的方法??
new一个没什么开销,一般5s或者15s一次心跳,new和tcp建立的开销相对这点时间来说没什么,反正是后台工作,又不和用户交互,考虑这个开销你想多了 --------------------编程问答--------------------
引用 3 楼 ygycomon 的回复:
心跳是客户端发给服务器端的,如果是服务器端发给客户端,客户端超过一定数值,服务器的端口不是都不够用?

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

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

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

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,
3.用socket.sendUrgentData(FF),给服务端,
4.如果服务端异常关闭的话,我就捕捉这个异常。。。
5.循环

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

我觉得心跳这个机制好像很简单,但是好像又很难一样。。。
归根到底,都还不是很懂,求再次指导。。。 --------------------编程问答--------------------
引用 1 楼 MrsFeng 的回复:
要想自动连接你只有每次去new创建这个sock对象,因为只有sock对象创建好了才由输入输出流


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

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

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,Thread.sleep(500);
3.用socket.sendUrgentData(FF),给服务端,
4.如果服务端异常关闭的话,我就捕捉这个异常。。。
5.循环

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

我觉得心跳这个机制好像很简单,但是好像又很难一样。。。
归根到底,都还不是很懂,求再次指导。。。 --------------------编程问答--------------------
引用 5 楼 mimixi666 的回复:
Quote: 引用 1 楼 MrsFeng 的回复:

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


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

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

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,Thread.sleep(500);
3.用socket.sendUrgentData(FF),给服务端,
4.如果服务端异常关闭的话,我就捕捉这个异常。。。
5.循环

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

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


心跳就是这样,其实就是利用了socket的超时机制,双方在超时时间内一直保持着通信,这就出现了所谓的长连接的概念 --------------------编程问答--------------------
引用 4 楼 mimixi666 的回复:
Quote: 引用 3 楼 ygycomon 的回复:

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

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

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

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

1.在原有的基础上,再开多一个线程,专门负责发送心跳,
2.先睡眠500毫秒,
3.用socket.sendUrgentData(FF),给服务端,
4.如果服务端异常关闭的话,我就捕捉这个异常。。。
5.循环

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

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


心跳的意思就是每隔一段时间,客户端给服务器发一段消息:
1、客户端:服务器,我还活着,你死了没
2、服务器:客户端,我知道你还活着这个信息,我已经记录下来了,同时告诉你我也还活着

具体应用场景太多了,你可以自己体会一下
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,