长连接的定义及其优缺点,以及在不同的浏览器中的支持情况

来源:互联网 发布:数组名可以做形参吗 编辑:程序博客网 时间:2024/04/28 10:31
       长连接应该翻译为keep-alive connection,或者是 persistent connection,而不是我们直译为Long Connection,否则你在英文文档中不好查到这方面的资料的,以下是维基百科针对长连接的说明:

    http://en.wikipedia.org/wiki/HTTP_persistent_connection

    以下是我的部分翻译:

     HTTP长连接(持久化连接)

        以下是一张连接与接连接的区别

                
HTTP长连接,英文的说话有这么几种:HTTP persistent connection、HTTP keep-alive或者 HTTP connection reuse,是用来在一个TCP连接的基础之上,发送多个HTTP请求以及接收多个HTTP响应,这是为了避免每一次请求都去打开一个新的连接。
在HTTP 1.0标准的时候,关于如何保持是没有官方标准支持长连接,这个时候客户端和服务端如果需要建立长连接,那客户端的发起请求的时候,就需要在请求头中带一个表示长连接请求头:
Connection: Keep-Alive
如果服务端同意长连接请求,那么服务端在返回头中增加响应头:
Connection: Keep-Alive
这样就建立了一个长连接,当客户端与服务端的某一方或者同时关闭连接的时候,或者网络原因,这个连接才会断掉。
在HTTP 1.1标准中,所有的请求都认为是长连接,这个时候HTTP长连接的建立不再需要标识单独的长连接信息。然而,在apache2.0中默认的连接超时时间是15秒,而2.2中默认是5秒,减少超时时间是为了服务器能够响更多的请求。
长连接的优点
1、减少CPU及内存的使用,因为不需要经常的建立及关闭连接,当然高峰并发时CPU及内存也是比较多的;
2、2、允许HTTP pipelining(HTTP 1.1中支持)的请求及响应模式:
为了便于理解HTTP pipelining,参见下图:


3、减少网络的堵塞,因为减少了TCP请求;
4、减少后续请求的响应时间,因为此时不需要建立TCP,也不需要TCP握手等过程;
5、当发生错误时,可以在不关闭连接的情况下进行提示;
根据RFC 2616 (page 46)的标准定义,单个客户端不允许开启2个以上的长连接,这个标准的目的是减少HTTP响应的时候,减少网络堵塞。
长连接的缺点:可能会损害服务器的整体性能,如apache的长连接时间的长短,直接影响到服务器的并发数。
长连接在浏览器中的使用情况
Netscape从4.05开始支持,Netscape不是通过timeout来关闭长连接,它是将空闲连接放置到一个队列中,当有需要向其它服务端建立长连接时,这个时候,它根据LRU(Least Recently Used)算法进行处理,即将最使少使用的空闲连接KILL掉;
IE从4.0.1开始支持,IE6、7只支持两个长连接,IE8支持6个,IE 60秒为默认的超时时间,这个值可以在注册表中修改;
FF类似IE通过timeout管理长连接,不过,默的是115秒,这个是可能通过配置进行更改的;
Opera从4.0开始支持长连接,长连接数可以自定义;


原创粉丝点击