长连接与短连接

news/2024/5/17 20:22:32 标签: server, 通讯, tcp, 服务器, socket, 网络

【转自】 http://blog.sina.com.cn/s/blog_4d1f40c00100rgbc.html

长连接与短连接

所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。
比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。

 

长连接与短连接的操作过程

通常的短连接操作步骤是:
连接→数据传输→关闭连接;


而长连接通常就是:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态,短连接在没有数据传输时直接关闭就行了


什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,下次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。


而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。


总之,长连接和短连接的选择要视情况而定。

发送接收方式

1、异步
报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。
2、同步
报文发送和接收是同步进行,既报文发送后等待接收返回报文。同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。

在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。

单工、半双工和全双工

根据通信双方的分工和信号传输方向可将通信分为三种方式:单工、半双工与全双工。在计算机网络中主要采用双工方式,其中:局域网采用半双工方式,城域网和广域网采用全双年方式。

1. 单工(Simplex)方式:通信双方设备中发送器与接收器分工明确,只能在由发送器向接收器的单一固定方向上传送数据。采用单工通信的典型发送设备如早期计算机的读卡器,典型的接收设备如打印机。

2. 半双工(Half Duplex)方式:通信双方设备既是发送器,也是接收器,两台设备可以相互传送数据,但某一时刻则只能向一个方向传送数据。例如,步话机是半双工设备,因为在一个时刻只能有一方说话。

3. 全双工(Full Duplex)方式:通信双方设备既是发送器,也是接收器,两台设备可以同时在两个方向上传送数据。例如,电话是全双工设备,因为双方可同时说话。

 

 

一。通信方式

主要有以下三大类:

(一)SERVER/CLIENT方式

1.一个Client方连接一个Server方,或称点对点(peer to peer):
2.多个Client方连接一个Server方,这也是通常的并发服务器方式。
3.一个Client方连接多个Server方,这种方式很少见,主要
用于一个客户向多个服务器发送请求情况。


(二)连接方式

1.长连接

Client方与Server方先建立通讯连接,连接建立后不断开,
然后再进行报文发送和接收。这种方式下由于通讯连接一直
存在,可以用下面命令查看连接是否建立:

netstat –f inet|grep 端口号(如5678)。

此种方式常用于点对点通讯


2.短连接

Client方与Server每进行一次报文收发交易时才进行通讯
接,交易完毕后立即断开连接。此种方式常用于一点对多点
通讯,比如多个Client连接一个Server.


(三)发送接收方式

1.异步

报文发送和接收是分开的,相互独立的,互不影响。这种方
式又分两种情况:

(1)异步双工:接收和发送在同一个程序中,有两个不同的
子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。

2.同步

报文发送和接收是同步进行,既报文发送后等待接收返回报文。
同步方式一般需要考虑超时问题,即报文发上去后不能无限等
待,需要设定超时时间,超过该时间发送方不再等待读返回报
文,直接通知超时返回。 


实际通信方式是这三类通信方式的组合。比如一般书上提供的
TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的
组合是基本不用的,比较常用的有价值的组合是以下几种:

同步短连接Server/Client
同步长连接Server/Client
异步短连接Server/Client
异步长连接双工Server/Client
异步长连接单工Server/Client

其中异步长连接双工是最为复杂的一种通信方式,有时候经
常会出现在不同银行或不同城市之间的两套系统之间的通信。
比如金卡工程。由于这几种通信方式比较固定,所以可以预
先编制这几种通信方式的模板程序。


二.报文格式

通信报文格式多样性更多,相应地就必须设计对应的读写报文的接
收和发送报文函数。

(一)阻塞与非阻塞方式 

1.非阻塞方式

读函数不停地进行读动作,如果没有报文接收到,等待一段时间后
超时返回,这种情况一般需要指定超时时间。

2.阻塞方式

如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

(二)循环读写方式
 

1.一次直接读写报文

在一次接收或发送报文动作中一次性不加分别地全部读取或全部
发送报文字节。

2.不指定长度循环读写

这一般发生在短连接进程中,受网络路由等限制,一次较长的报
文可能在网络传输过程中被分解成了好几个包。一次读取可能不
能全部读完一次报文,这就需要循环读报文,直到读完为止。

3.带长度报文头循环读写

这种情况一般是在长连接进程中,由于在长连接中没有条件能够
判断循环读写什么时候结束,所以必须要加长度报文头。读函数
先是读取报文头的长度,再根据这个长度去读报文.实际情况中,
报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须
转换成ASCII,常见的报文头码制有:
(1)n个字节的ASCII码
(2)n个字节的BCD码
(3)n个字节的网络整型码

以上是几种比较典型的读写报文方式,可以与通信方式模板一起
预先提供一些典型的API读写函数。当然在实际问题中,可能还
必须编写与对方报文格式配套的读写API.

在实际情况中,往往需要把我们自己的系统与别人的系统进行连接,
有了以上模板与API,可以说连接任何方式的通信程序都不存在问题。

 

 


http://www.niftyadmin.cn/n/998883.html

相关文章

Linux命令学习总结:rmdir

命令简介: 该命令用用来删除空目录,如果目录非空,则会出现错误。可以使用rm删除目录中的文件后,使用rmdir删除目录。也可以使用rm -rf替代rmdir命令。这是一个非常简单的命令。 命令语法: rmdir [OPTION]... DIRECT…

给你看看我练习的oracle语句

1 -------预算--2 CREATE OR REPLACE VIEW V_YUSUAN_BGY_WZ20151204 AS3 SELECT tb_cube_fc05.pk_entity pk_org,/*主体pk*/4 org_orgs.code orgcode,/*主体编码*/5 org_orgs.name orgname,/*主体名称*/6 tb_cube_fc05.pk_year pk_year,/*年份*/7 …

Android[中级教程]第十章 Mysql+Json+Android的组合

这一章,我们重点来介绍服务器Mysql数据库通过PHP将Json数据交给Android来处理,同学们初看一定觉得好多专业术语哦,呵呵,其实,等我讲完,大家应该都能理解,好了,首先我们来看数据库,Mysql数据库,做过网站的同学应该对Mysql数据库不陌生,我们先在Mysql数据库中创建库表跟数据 接下…

小米互联网音箱升级部分殉难者留言

升级小米网络音响后。连接电视无声音了? 升级小米网络音响后。连接电视无声音了? 未升级前正常使用呀!求助工程师! 能提供下小米网络音响12315投诉范本吗? 5月31日如果还未修复小米网络音响主要功能。准备6月1日再次12…

C# 中使用System.Net.Http.HttpClient 模拟登录博客园 (GET/POST)

一、 System.Net.Http .HttpClient简介 System.Net.Http 是微软.net4.5中推出的HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web Service 的客户端组件; 2…

读《一个人的朝圣》

这本书的名字写得言简意赅,发人深思。一个人是谁?朝什么?什么是圣? 哈罗德接到电话:老朋友奎琳病危。在去邮局发慰问信的路上,踏上了徒步去看望老友的旅程。刚出发的哈罗德内心中充满对儿子、妻子和朋友的愧…

DIY Ruby CPU 分析 Part II

2019独角兽企业重金招聘Python工程师标准>>> 【编者按】作者 Emil Soman,Rubyist,除此之外竟然同时也是艺术家,吉他手,Garden City RubyConf 组织者。本文是 DIY Ruby CPU Profiling 的第二部分。本文系 OneAPM 工程师…

乔布斯的经营理念

乔布斯的经营理念: 1、不惜一切代价取悦客户; 2、好的创意需要时间; 3、不要纠结于错误; 4、激情非常重要。 这位天才为苹果创造了四条产品线和两个在线商店:Mac、iPod、iPhone、iPad,iTunes 和 App S…