人生境界:明智、中庸、诚信、谦逊
分类: LINUX
2013-02-19 09:51:14
原文地址:长连接 短连接 异步 同步 )阻塞与非阻塞 作者:jueduiyingxiong
什么是长连接?
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。
总之,长连接和短连接的选择要视情况而定。
一般在java上代码实现是
短连接:
run(){
read //读取请求包
process //处理
write //应答处理结果
}
长连接:
run(){
while(NotEnd){
read
process
write
}
}
以下是关于长连接中的检测保持连接的心跳比喻
连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:
长连接:系统通讯连接建立后就一直保持。
短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;
通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。
具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接.
所以长短连接只是一个概念问题长短连接的socket,就是使用普通的socket函数,没有什么特殊的。
最后,关于同步与异步
同步操作指上一个操作返回结果后才能发下一个操作的数据包
异步操作指先把所有的操作数据包发完后 再等待它们的返回结果
相比较看 异步操作速度快 特别是在每个包处理方法独立的情况下
异步操作一般提供两个端口,一个负责接收数据,一个负责发送数据
<<<<<<<<<<<<<<==========================================>>>>>>>>>>>>>>>>
长短的区别是我要搞清楚,见现在看而言,长连接占用资源,但是一般通信性能肯定是好,短省资源。另外一个很重要的区别就是,主动与被动,长连接是先主动建立一个连接,有数据就发送,没有就等,短连接则是如果有通信要求,被动的先建立一个连接,收发数据,断开。具体的好坏个人觉得还是需要编程实践才知道。应该说对与server和client的影响还是很大。