1 > websocket 與httphtml
websocket約定了一種通訊規範,經過一個握手機制,客戶端和服務器之間能創建一個相似tcp的鏈接,從而方便它們的通訊。websocket出現以前,web交互通常是基於http協議的短鏈接或長鏈接。web
補充:http是運行在TCP協議傳輸層上的應用協議;websocket是經過http協議協商如何鏈接,而後獨立運行在TCP協議傳輸上的應用協議;websocket僅僅是利用了http協議作鏈接請求;websocket之因此能持久鏈接的緣由:它運行在TCP協議上,TCP協議自身是長鏈接協議。ajax
爲何http不是長鏈接?早期的http在發起每一個請求,響應完成後就會關閉Socket,但後來加了多路複用keepAlive協議後http協議已經能夠實現長鏈接。瀏覽器
2> Websocket是什麼協議,具備什麼優勢?服務器
Websocket 是一個持久化的協議,而http非持久的協議;websocket
http的生命週期經過Request來界定,一個request只能有一個response,且response是被動的,不能主動發起;併發
websocket是基於http協議的,或者說借用了http的協議來完成一部分握手;socket
websocket協議:雙向通訊,協議分爲2部分:握手階段、數據通訊階段;tcp
websocket鏈接服務器的URI以「ws」或「wss」開頭, ws開頭的默認TCP端口爲80,wss開頭的默認端口是443;oop
補充:除了websocket 可實現實時信息傳遞,還有:
1)ajax輪詢:讓瀏覽器隔個幾秒就發送一次請求,詢問服務器是否有新信息
2)http long poll:long poll 原理跟ajax輪詢差很少,都是採用輪詢的方式,不過採用的是阻塞模型(客戶端發起鏈接後,若是沒消息,就一直不返回Response給客戶端,直到有消息才返回,返回完以後,客戶端再次創建鏈接loop)
總結:ajax輪詢:須要服務器有很快的處理速度和資源;
long poll :須要有很高的併發,也就是說同時接待客戶的能力;
不然 上面2者都會報錯:503 Server Unavailable
3> websocket 解決了http的難題:
被動性:當服務器完成協議升級後(http->websocket),服務端就能夠主動推送信息給客戶端
反覆解析http協議,查看indentity info:websocket只須要一次http握手,因此說整個通信過程創建在一次鏈接/狀態中,也就避免了http的非狀態性,服務端會一直知道你的信息,直到你關閉請求。
4>下面的代碼片斷是打開一個鏈接,爲鏈接建立事件監聽器,斷開鏈接,消息時間,發送消息返回到服務器,關閉鏈接。
https://www.cnblogs.com/netqq/p/5786750.html