江邊望海的技術人生
分享真知
基於websocket的軟件交互設計思路

可能多數人認為只有基於C/S架構纔可以稱之為軟件。但是隨著互聯網的發展,越來越多的人開始意識到“網站即軟件”。

這得益於互聯網技術的發展,特別是近幾年移動互聯網技術的發展。我們來回顧一下互聯網發展的過程。

第一代的互聯網技術比較簡單,僅僅是提供靜態頁的訪問。當時瀏覽器的功能還非常簡單只能用於瀏覽靜態頁。隨著技術的發展出現了基於前端異步請求(Ajax)的交互。

第二代的互聯網技術提供了異步請求和動態頁面響應,動態語言從數據庫中讀取數據並動態的生成HTML頁面。

第三代的互聯網技術更加注重功能性的體驗。瀏覽網站完完全全是在操作軟件。比如:人們在瀏覽電商網站時會關注商品、購買商品。而網站也有將降價信息和特賣信息實時推送給用戶的需求。如果靠用戶每次刷新頁面來獲取最新數據肯定不現實。

本質上,第一代和第二代的網站技術從操作方式並沒有發生太大的變化,都是採取瀏覽器請求服務器,拉取(pull)數據的架構。

而現在的網站有著大量的“網站即軟件”的需求。網站主需要主動向用戶推送信息,用戶與用戶間互相推送信息等這種消息實時的業務需求越來越多。

由於“瀏覽器/服務器”模式是通過http建立通訊的,http通訊的特點是無狀態,短鏈接。很難滿足消息推送的需求。記得以前很多網站採取XHR輪詢的方式來解決,但是會存在大量的無效訪問和對服務器造成不必要的壓力。

目前,最成熟的方案是通過瀏覽器與websocket建立長效的鏈接,使用 ws 協議達到實時數據傳輸的目的。

在PHP領域實現 push 消息推送除了可以用 node 來實現外,也可以使用 swoole


科普一下關於 wshttp 協議之間的異同

相同:

都是建立在 TCP 之上的協議

不同:

HTTP协议为单向协议,即浏览器只能向服务器请求资源,服务器才能将数据传送给浏览器,而服务器不能主动向浏览器传递数据。每次http请求时都需要三次握手才能发送请求。

WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议。WebSocket也需要通过建立握手连接,一旦鏈接建立就可以保持長連接了。

http vs websocket

http vs websocket