HTTP长连接和短连接
长连接与短连接
- 长连接:Client方与Server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下通讯连接一直存在,常用于P2P(点对点)通信。
- 短连接:Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。这种方式常用于一点对多点通讯,如C/S通信。
长连接与短连接的操作过程
- 短连接的操作步骤 建立连接–>数据传输–>关闭连接…建立连接–>数据传输–>关闭连接
- 长连接的操作步骤 建立连接–>数据传输…(保持连接)…数据传输–>关闭连接
长连接与短连接的使用时机
- 长连接:长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。由于每个TCP连接的建立都需要三次握手,连接断开时要四次握手。如果每次操作都要建立连接然后再操作的话处理速度会降低,所以在第一次建立连接后保持连接,下次操作时直接发送数据就可以了,不用再次建立TCP连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。
- 短连接:web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接,而且同时面向成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。
总之:长连接和短连接的选择要视需求而定。
发送接收方式
- 异步:报文发送和接收是分开、相互独立、互不影响的。这种方式又分两种情况:
- 异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。
- 异步单工:接送和发送使用两个不同的程序来完成。
- 同步:报文发送和接收是同步进行,即报文发送后等待返回报文。同步方式一般需要考虑超时问题,超过等待时间发送方不再等待返回报文,直接通知超时返回。
报文格式
通信报文格式很多,对应地需设计不同的读写报文的方式。
- 阻塞与非阻塞方式
- 非阻塞方式:读函数不停的进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。
-
阻塞方式:如果没有接收到报文,则读函数一直处于等待状态,直到报文到达。
- 循环读写方式
- 一次直接读写报文:在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。
- 不指定长度循环读写:一般发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成很多个包,一次读取可能不能全部读完报文,这就需要循环读取报文,直到读完为止。
- 带长度报文头循环读写:这种情况一般在长连接中,由于在长连接中没有条件能够判断循环读写什么时候结束。必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文,实际情况中,报头码制格式还经常不一样,如果是非ASCII的报文头,还必须转换成ASCII常见的报文头编制有:
- n个字节的ASCII码
- n个字节的BCD码
- n个字节的网络整型码
转自:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp23