长连接及短连接以及同步异步的问题
2010-11-30 14:46
323 查看
什么是长连接?
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。
总之,长连接和短连接的选择要视情况而定。
一般在java上代码实现是
短连接:
run(){
read //读取请求包
process //处理
write //应答处理结果
}
长连接:
run(){
while(NotEnd){
read
process
write
}
}
以下是关于长连接中的检测保持连接的心跳比喻
连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:
长连接:系统通讯连接建立后就一直保持。
短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;
通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。
具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接.
所以长短连接只是一个概念问题长短连接的socket,就是使用普通的socket函数,没有什么特殊的。
最后,关于同步与异步
同步操作指上一个操作返回结果后才能发下一个操作的数据包
异步操作指先把所有的操作数据包发完后 再等待它们的返回结果
相比较看 异步操作速度快 特别是在每个包处理方法独立的情况下
异步操作一般提供两个端口,一个负责接收数据,一个负责发送数据
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接-》数据传输-》关闭连接;
而长连接通常就是:
连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。
总之,长连接和短连接的选择要视情况而定。
一般在java上代码实现是
短连接:
run(){
read //读取请求包
process //处理
write //应答处理结果
}
长连接:
run(){
while(NotEnd){
read
process
write
}
}
以下是关于长连接中的检测保持连接的心跳比喻
连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:
长连接:系统通讯连接建立后就一直保持。
短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;
通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。
具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接.
所以长短连接只是一个概念问题长短连接的socket,就是使用普通的socket函数,没有什么特殊的。
最后,关于同步与异步
同步操作指上一个操作返回结果后才能发下一个操作的数据包
异步操作指先把所有的操作数据包发完后 再等待它们的返回结果
相比较看 异步操作速度快 特别是在每个包处理方法独立的情况下
异步操作一般提供两个端口,一个负责接收数据,一个负责发送数据
相关文章推荐
- 长连接及短连接以及同步异步的问题
- 长连接及短连接以及同步异步的问题
- js中关于get请求(包括异步以及直接用过网页连接请求),后台接收乱码问题
- 微软BI 之SSIS 系列 - Merge, Merge Join, Union All 合并组件的使用以及Sort 排序组件同步异步的问题
- Ajax 是什么?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?以及 HTTP状态码
- Qt:连接信号与信号槽的Connection函数,同步还是异步问题
- 如何利用神经网络做回归问题(全连接以及一维卷积)
- 用xshell5连接ubuntu系统教程,以及一些其它的问题
- 关于阻塞/非阻塞/同步/异步问题
- 11.1~11.4 同步异步下载以及请求参数设置
- Springmvc中 同步/异步请求参数的传递以及数据的返回
- GridView异步加载中一次加载完所有数据问题的解决以及其原因分析
- ajax同步异步问题
- Android(java)学习笔记70:同步中的死锁问题以及线程通信问题
- iOS激情详解之URL同步,异步连接
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
- 修改MYSQL密码问题以及修改PhpMyAdmin连接MYSQL的密码问题
- 半同步半异步模式以及Leader_Follwer模式
- 异步长连接遇阻塞,探索,以及解决
- Linux修改系统时间、硬件时间以及时间同步问题