網(wǎng)上關(guān)于WebSocket的文章已經(jīng)很多了,有些總結(jié)的也非常不錯,這里就不在整理了,只是將我在學習的過程中感覺比較不錯的文章列出來,供以后查看,同時也非常感謝這些大牛的無私分享:
WebSocket 是什么原理?為什么可以實現(xiàn)持久連接?
微信,QQ這類IM app怎么做——談?wù)刉ebsocket
其中關(guān)于 Socket與WebSocket
的一些區(qū)別我感覺下面的這個說法還是比較便于理解的:
首先澄清一點丈积,Socket與WebSocket處于的網(wǎng)絡(luò)層級是不對等的鬼悠,很難直接比較。WebSocket在網(wǎng)絡(luò)七層協(xié)議上的層級等同于Http捌木,而Socket位置處于七層協(xié)議中的第四層油坝,Socket是操作系統(tǒng)對TCP、UDP的封裝刨裆。WebSocket處在上層澈圈,Socket處在下層,WebSocket依賴于Socket帆啃,Socket為WebSocket服務(wù)瞬女。
那么應該是拿WebSocket與Http進行比較。WebSocket常見于客戶端-服務(wù)端全雙工的場景努潘,客戶端可以發(fā)送消息給服務(wù)端诽偷,同時服務(wù)端也可以主動發(fā)送消息給客戶端。而Http是單向的關(guān)系疯坤。只能客戶端發(fā)送請求报慕,服務(wù)端被動接收,服務(wù)端沒有主動發(fā)起對話的能力压怠。
聊天是一個典型的全雙工場景:聊天的雙方先將消息發(fā)送給服務(wù)端眠冈,服務(wù)端在把消息轉(zhuǎn)給對方。如果使用WebSocket刑峡,得益于全雙工洋闽,整個邏輯非常順暢。而Http場景下突梦,服務(wù)端沒有主動發(fā)起請求的能力诫舅,只能維持Http長鏈接,或者客戶端定時輪詢服務(wù)端宫患,獲取最新的信息刊懈。