浅谈socket长连接和短连接的区别!
2016-01-06 12:54
225 查看
能用一句大白话说清楚的事,绝不用专业词汇说两句。
先看看一般的socket通讯模型是怎么样的:
建立连接
①客户端---------------------服务器端
通讯
②客户端---------------------服务器端
断开
③ 客户端---------------------服务器端
在一次TCP通讯中,先通过三次握手建立连接,然后客户端和服务器端通讯(数据读写操作),最后四次握手断开连接。这是一次通讯,在实际的项目场景中,高并发通讯是
很常见的事,每建立一次TCP连接是要消耗资源的,总不能老是断开了连,连完了断,这样资源消耗是非常大的。在一些操作频繁,并发数不是很多(长时间持有连接也消耗资源)的点对点情况下,适合使用长链接。而在一些操作不多,但并发很大一点对多点的情况下,使用短连接较为适合。
啥是长连接,字面意思理解,就是连接的时间长呗,没错确实是这么个意思,但定量上理解,不能一直这么长下去吧。确实不能,最终还是要断的,好好说吧,即是客户端和服务器端建立连接后,连接在一次通讯过后不会立即断开,依然存在,供后续的数据读写服务。客户端和服务器端通过心跳保持连接,在所有的读写结束后,断开连接。而短链接指的是建立连接--通讯--断开这样的一次通讯。通讯结束后即刻断开连接,释放资源。
这里还有一个接受/发送方式的问题:
1.全双工:同一时刻,接受和发送方可同时读写数据。
2.半双工:同一时刻,接受和发送方在一个方向上只有一方能读或写数据。
3.单工:同一时刻,接受和发送方在固定方向上只有一方能读或写数据。
在加上同步异步,由此构建的通讯模型就非常丰富了,比如异步长连接,同步短连接等等。
先看看一般的socket通讯模型是怎么样的:
建立连接
①客户端---------------------服务器端
通讯
②客户端---------------------服务器端
断开
③ 客户端---------------------服务器端
在一次TCP通讯中,先通过三次握手建立连接,然后客户端和服务器端通讯(数据读写操作),最后四次握手断开连接。这是一次通讯,在实际的项目场景中,高并发通讯是
很常见的事,每建立一次TCP连接是要消耗资源的,总不能老是断开了连,连完了断,这样资源消耗是非常大的。在一些操作频繁,并发数不是很多(长时间持有连接也消耗资源)的点对点情况下,适合使用长链接。而在一些操作不多,但并发很大一点对多点的情况下,使用短连接较为适合。
啥是长连接,字面意思理解,就是连接的时间长呗,没错确实是这么个意思,但定量上理解,不能一直这么长下去吧。确实不能,最终还是要断的,好好说吧,即是客户端和服务器端建立连接后,连接在一次通讯过后不会立即断开,依然存在,供后续的数据读写服务。客户端和服务器端通过心跳保持连接,在所有的读写结束后,断开连接。而短链接指的是建立连接--通讯--断开这样的一次通讯。通讯结束后即刻断开连接,释放资源。
这里还有一个接受/发送方式的问题:
1.全双工:同一时刻,接受和发送方可同时读写数据。
2.半双工:同一时刻,接受和发送方在一个方向上只有一方能读或写数据。
3.单工:同一时刻,接受和发送方在固定方向上只有一方能读或写数据。
在加上同步异步,由此构建的通讯模型就非常丰富了,比如异步长连接,同步短连接等等。
相关文章推荐
- ExoPlayer编译的重要设置
- 使用BorderLayout和默认布局时的一些注意
- js事件监听器用法实例详解-注册与注销监听封装
- poj 3258 River Hopscotch 二分搜索极值
- 程序员如何买保险?
- C++如何通过一个响应事件接受多个控件消息
- 【NanoPi2试用体验】裸机下的程序-1
- windows----composer、laravel安装
- 关于日期的操作
- Qt3升至Qt4需要注意的几件事项浅谈
- 我是一个有故事的男人
- 图像平滑处理
- Qt3升至Qt4需要注意的几件事项浅谈
- OC NSDate NSDateFormatter NSCalendar
- System类
- Laravel5.2快速入门
- 【NanoPi2试用体验】裸机第一步
- 【笔记】构造函数的私有、公有、特权、静态成员
- Java Script 第五节课 Java Script的强制转换。
- visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。