当前位置: 首页>編程日記>正文

http长连接、长轮询的理解

http长连接、长轮询的理解

昨天翻了翻《HTTP权威指南》,看到HTTP连接管理这节,书中讲到了HTTP事务,突然发现事务一词在好多场合都用到了,事务简单来说就是一连串的事情,要么都做,要么都不做,中间出了问题,整个过程都失败,对于HTTP事务就是域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源--> 浏览器对页面进行渲染呈现给用户(因为都是这样说的,所以直接从百度复制粘贴过来)。

然后讲到了串行事务和并行连接,后者是用多线程机制实现,然后讲到管道化连接,其实就是流水线,用队列机制实现,最让我印象深刻的就是Connection:keep-alive这个首部,以前看过,但总是记不住,所以昨天为了搞清楚一看就是看到凌晨3点。这个首部在HTTP1.0+中支持,默认未激活,除非客户端显式地发送这个首部,服务器知道后再决定用不用持久连接,如果服务器返回了一样的Connection:keep-alive,客户端就认为服务器开了持久连接,如果没有,客户端收到响应数据后就会关闭连接,如果想一直保持,那客户端还得每次都带上这个首部。

话说到这里,突然发现跟标题也没啥关系啊,别急,现在重点来了,以前觉得http长连接和长轮询要保持住连接应该要用这个首部,然而很显然我是错的,这个首部和长连接,长轮询没关系,这个首部只是为了减少通讯双方建立连接的开销,本质上还是一问(request)一答(response),而且Connection: keep-alive只是是双方约定长连接、还是收完一次数据后立刻关闭套接字,简单的说就是HTTP协议的Connection: keep-alive和长连接,长轮询都是基于socket写代码写出来的,没谁一定要用谁。

再说长连接和长轮询,这两个是为了实现服务器push实现的机制,前面说到了,http是一问一答模式,客户端不发请求服务器就永远也不会响应,但是在实时通信和消息推送这样的场景完全不合理啊,服务器必须一有数据就要发给我,这样才是实时,为了解决这个问题,所以有很多服务器push技术。

长轮询不是一个真正的push技术,传统的轮询是前端ajax轮询,每隔一段时间发一个请求,服务器响应后马上关掉连接,但是这种方式明显有很大的开销,所以才有了长轮询,就是响应时间变长了,浏览器(客户端)发送一个请求,服务器hold住连接(就是循环加睡觉,可以到网上找找简单的实现代码),等有消息的时候才返回,当然浏览器的这个连接在这个过程中可以阻塞也可以异步非阻塞,ajax是异步的,等等,你说了这么多我还是不知道为什么长轮询可以当push技术用,和传统的有什么区别,这里说一下,长轮询技术要求服务器一旦发送了响应,客户端必须马上再发一个请求,这就变成了服务器是主动方,所以才说是一种伪push技术

长连接看网上的说法是在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。其实我也没看懂,毕竟没有真的实现过。

现在流行的push技术是websocket,这是一种基于HTTP协议的新协议,实现了全双工通信,websocket中不再有主动方和被动方,都是对等方,客户端和服务器可以随时互相发送数据。

瞎说一大堆,其实就是策略与机制的问题,不同应用场景利用socket的一整套api实现不同功能,但都是双方规定好才能奏效。还有一点经过本人亲身体验,纠结名词其实都是基础不行,所以想真正搞懂这些,赶快去补补基础吧,《TCP/IP详解》、《Unix网络编程:卷一》走起,多看多练!


https://www.fengoutiyan.com/post/14367.html

相关文章:

  • spring长轮询
  • 数据库长连接
  • 定时轮询
  • 前端长连接
  • 长轮询
  • 长连接
  • 中断和轮询的优缺点
  • http长轮询
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機