WebSocket学习
? ? ? ?其實我們所用的程序是要經過兩層代理的,即HTTP協議在Nginx等服務器的解析下,然后再傳送給相應的Handler(PHP等)來處理。
? ? ? ?簡單地說,我們有一個非常快速的接線員(Nginx),他負責把問題轉交給相應的客服(Handler)。
? ? ? ?本身接線員基本上速度是足夠的,但是每次都卡在客服(Handler)了,老有客服處理速度太慢。,導致客服不夠。
? ? ? ?Websocket就解決了這樣一個難題,建立后,可以直接跟接線員建立持久連接,有信息的時候客服想辦法通知接線員,然后接線員在統一轉交給客戶。
?
? ? ? ?但是Websocket只需要一次HTTP握手,所以說整個通訊過程是建立在一次連接/狀態中,也就避免了HTTP的非狀態性,服務端會一直知道你的信息,直到你關閉請求,這樣就解決了接線員要反復解析HTTP協議,還要查看identity info的信息。
? ? ? ?同時由客戶主動詢問,轉換為服務器(推送)有信息的時候就發送(當然客戶端還是等主動發送信息過來的。。),沒有信息的時候就交給接線員(Nginx),不需要占用本身速度就慢的客服(Handler)了。
??
? ? ? ?與WebSocket相似但具有缺陷的技術有:
? ? ? 1.ajax輪詢 的原理非常簡單,讓瀏覽器隔個幾秒就發送一次請求,詢問服務器是否有新信息。
? ? ? 2.long poll 其實原理跟 ajax輪詢 差不多,都是采用輪詢的方式,不過采取的是阻塞模型(一直打電話,沒收到就不掛電話),也就是說,客戶端發起連接后,如果沒消息,就一直不返回Response給客戶端。直到有消息才返回,返回完之后,客戶端再次建立連接,周而復始。
? ? ??從上面可以看出其實這兩種方式,都是在不斷地建立HTTP連接,然后等待服務端處理,可以體現HTTP協議的另外一個特點,被動性。
何為被動性呢,其實就是,服務端不能主動聯系客戶端,只能有客戶端發起。
? ? ??ajax輪詢 需要服務器有很快的處理速度和資源。(速度)
? ? ? long poll 需要有很高的并發,也就是說同時接待客戶的能力。(場地大小)
?
? ? ? 而對于WebSocket來說,只需要經過一次HTTP請求,就可以做到源源不斷的信息傳送了。(在程序設計中,這種設計叫做回調,即:你有信息了再來通知我,而不是我傻乎乎的每次跑來問你)。這樣的協議解決了上面同步有延遲,而且還非常消耗資源的這種情況。整個通訊過程是建立在一次連接/狀態中,也就避免了HTTP的非狀態性,服務端會一直知道你的信息,直到你關閉請求,這樣就解決了接線員要反復解析HTTP協議,還要查看identity info的信息。
?
?
? ? ? ?瀏覽網頁時,經過三個過程
? ? ? 1、瀏覽器經過三次握手與web服務器建立鏈接,
? ? ? 2、web服務器返回響應
? ? ? 3、瀏覽器通過四次握手主動斷開鏈接
轉載于:https://www.cnblogs.com/yedu/p/4766638.html
總結
以上是生活随笔為你收集整理的WebSocket学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: exists改写SQL,使其走正确的执行
- 下一篇: VS.net中快捷键收缩和展开代码段