关于http长连接短连接&tcp连接&socket连接&unix domain socket通信

一,http连接

http协议是 请求/应答 模型。客户端发送请求,服务端对请求做一次响应。服务端只能在客户端发送请求后做一次响应,不能主动发送消息给客户端。

http是应用层协议,传输层用的一般是tcp协议,理论上http应用层协议也可以在传输层采用udp协议,但是如果http协议无状态特点加上udp的不可靠连接,会产生非常糟糕的组合,所以http协议在传输层默认采用tcp协议。

http 1.0短连接

http 1.0默认采用的是短连接,每次交互过程都是如下四个步骤:

  • 客户端和服务端建立tcp连接 (三次握手)
  • 客户端发送数据给服务端
  • 服务端回送响应给客户端
  • 客户端和服务端的tcp连接断开 (四次挥手)

http 1.1长连接

http 1.1默认采用的是长连接。如果客户端和服务端采用http1.1协议进行交互,则默认采用的是长连接,具体表现为客户端的请求header和服务端的响应header里面都有connection :keep-alive 这个标记:

Connection: keep-alive

长连接的优点:

  • 可以在一个tcp连接中处理多个请求。处理多个请求的表现形式有两种:
    • 1,前一个请求/响应结束后,建立的tcp连接并不关闭,而是可以继续用来处理下一个请求/响应,以达到tcp连接的复用。
    • 2,流水线技术(http pipelinning), 即前一个请求发出,还没收到响应时,可以继续发送另外一个请求。不过服务端回送的两次响应顺序必须要跟请求的顺序一致,即遵循FIFO规则。其实资料显示流水线技术使用并不广泛。

结论

http长连接是说tcp连接在一次请求/响应完成后不断开。

2,socket连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

  • 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
  • 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  • 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

3,socket连接和tcp连接的关系

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

socket是对TCP/IP协议的封装和应用(程序员层面上),它提供了一组基本的函数接口(比如:create、listen、accept等),使得程序员更方便地使用TCP/IP协议栈。

4,Socket连接和Http连接的关系

Socket连接一般情况下都是TCP连接,因此Socket连接一旦建立,通信双方就可以进行互相发送内容。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态(这也就是常说的“心跳策略”)。关于心跳后面会专门写一篇总结文章。

Http连接是请求/响应的模式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

如果建立的是Socket连接,服务器可以直接将数据传送给客户端;如果方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。

所以真正的服务端push推送机制,一般是用socket来实现,而不是http长连接来实现。

http 长连接和tcp长连接的关系

Http长连接 和 TCP长连接的区别在于: TCP 的长连接需要自己去维护一套心跳策略。,而Http只需要在请求头加入keep-alive:true即可实现长连接。

internet socket和unix domain socket的关系

上面说的socket连接都是指internet socket连接,是对tcp or udp连接做了一层封装,需要走网卡的。

还有一种socket通信是unix domain socket,比较常见的就是用于同一台主机之间不同进程间通信,比如运行在同一台主机上的nginx和php-fm。

location ~ [^/]\.php(/|$) {
    #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
}

/dev/shm/目录其实是在内存中,这样nginx和php-fpm的交互性能会更高,但是流量很大时会占用很多内存。如果对这个性能追求不是特别高,也可以指定普通目录下的sock文件(硬盘上)。但是不管是/dev/shm/这种内存中的sock文件,还是硬盘上的普通文件,在高负载的情况下都比fastcgi_pass 127.0.0.1:9000这种走tcp连接的性能更好。

参考

1,长连接和短连接
2,什么是长连接
3,HTTP 是基于 TCP 还是 UDP 的
4,nginx 和 php-fpm 通信使用unix socket

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268