名称党-长/短连接

来源:互联网 发布:淘宝上拍卖的车靠谱吗 编辑:程序博客网 时间:2024/04/29 20:19

每次向服务发起请求,就建立一个连接,任务结束就中断连接,即短链接。假如通信结束后仍然保持连接,则为长连接。

对于用户频繁的请求服务,适用于建立长连接,但连接数最好进行限制,防止建立太多的连接拖累服务器。

从http/1.1开始,默认使用长连接,这样的优点是,单个网页的加载可能需要HTML文件和多个CSS或者JS,假如每获取一个静态文件都建立一次连接,那么就太浪费时间了,而在保持连接的情况下,继续GET即可。

长/短连接应当在TCP连接的范畴中来讨论。有人常说HTTP的短连接和长连接如何如何,但是HTTP只是一个应用层协议,又是无状态的,最终实质性的保持连接还是得靠传输层,即TCP。

Nginx作为代理的一种常见配置方式是在NginX与客户端之间使用长连接,NginX与后端应用服务器之间使用短连接。

对于长连接,可能需要定时发送数据包,或者触发机制,来维持长连接的状态。

在header头中设置请求长连接类型以及请求之后断开连接:

Connection: keep-aliveConnection: close

HTTP 请求header头中Connection声明为keep-alive告诉对方要长连接不立即断开,但是TCP的keep-alive则是一种检查对方是否仍旧和自己保持连接的机制以避免自作多情半开放的连接。


example-1

使用Memcache的ddServer方法,添加一个memcache服务到连接池。默认参数persistent = true ,使用长连接。

处理情况:一个 memcache 的连接 hash 值主要跟 host、port 以及 timeout 有关。有一个连接请求到来时就根据host 和 port 生成一个 hash 值,然后查表。有则取出,没有则新建一个连接,新建后放入连接池。请求关闭时并不关闭对 memcache server 的连接,而是把这个连接(在做一些状态更新后)放入连接池(就是前面提到的那个 hash 表),供下次查询使用。

persistent = false

创建persistent 为 false 时的表现是很好理解的,请求来了就连接。请求完毕就关闭对 memcache server 的连接。

example-2
MySQL数据库的连接默认属长连接,如果长期没有对数据库进行任何操作,在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。

0 0
原创粉丝点击