如何在公司項目中使用 WebSocket— 入門實戰(zhàn)指南

本文從 WebSocket 基礎(chǔ)概念出發(fā),介紹在實際開發(fā)中從本地聯(lián)調(diào)到部署上線的流程以及注意事項姻檀,讓 WebSocket 小白以最小成本應用到項目中命满。

一、WebSocket 基礎(chǔ)

1绣版、什么是 WebSocket

WebSocket 是一種網(wǎng)絡(luò)傳輸協(xié)議胶台,可在單個TCP連接上進行全雙工通信

2、對比 http

  • 兩者都位于應用層杂抽,都依賴TCP協(xié)議
  • WebSocket 協(xié)議一般以ws://或wss://開頭
  • HTTP 不支持全雙工通信诈唬,一般使用輪詢方式

3、WebSocket 基礎(chǔ)用法

兼容性:

01.png

https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket

一個簡單的 Demo

02.png

(視頻詳見原文

客戶端可以在控制臺 -network-ws下看到 WebSocket 消息

03.png

注意請求頭里的幾個關(guān)鍵字段

04.png
  1. 請求地址為 ws:// 或 wss:// 開頭
  2. Connection 必須設(shè)置 Upgrade缩麸,表示客戶端希望連接升級
  3. Upgrade字段必須設(shè)置 WebSocket铸磅,表示希望升級到 WebSocket 協(xié)議。
  4. 如果服務(wù)端支持 websocket杭朱,會在響應頭中返回相同的信息阅仔,并且連接狀態(tài)置為101(協(xié)議切換成功

二、如何在項目中使用 WebSocke

下面以一個實際項目為例弧械,展示如何實現(xiàn)一個WebSocket接口八酒,包含開發(fā)->聯(lián)調(diào)->部署→上線整個流程。

1刃唐、開發(fā)環(huán)境

將上面的 Demo簡單封裝一下羞迷,在項目中調(diào)用如下:

05.png

配置 webpack 代理

06.png

說明:

  • WebSocket接口要和http接口分開
  • 域名使用location.host并且通過反向代理轉(zhuǎn)發(fā),目的是保留cookie和頭信息画饥。

2衔瓮、心跳檢測&斷線重連

為了保證連接穩(wěn)定,需要考慮一些異常情況抖甘,如網(wǎng)絡(luò)波動導致連接中斷报辱,服務(wù)器超時等。

心跳檢測即客戶端定時向服務(wù)端發(fā)送心跳消息单山,保持連接穩(wěn)定碍现;

斷線重連即發(fā)送消息前,檢測連接狀態(tài)米奸,若連接中斷昼接,嘗試n次連接;

封裝如下:

07.png

也可選擇第三方庫處理悴晰。

3慢睡、Nginx配置

The WebSocket protocol is different from the HTTP protocol, but the WebSocket handshake is compatible with HTTP, using the HTTP Upgrade facility to upgrade the connection from HTTP to WebSocket.

This allows WebSocket applications to more easily fit into existing infrastructures.

For example, WebSocket applications can use the standard HTTP ports 80 and 443, thus allowing the use of existing firewall rules.

location /websocket {
    proxy_pass http://xx.xxx.xx.xx; # websocket服務(wù)器逐工。不用管 ws://
    proxy_http_version 1.1; # http協(xié)議切換
        
    proxy_set_header Host $host; # 保留源信息
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade; # 請求協(xié)議升級,如果生產(chǎn)環(huán)境有報400錯誤漂辐,可以嘗試將值設(shè)置為websocket
    proxy_set_header Connection $connection_upgrade;
}

三泪喊、其他

sockiet.io

sockiet.io是基于 Node 的實時應用程序框架,對比原生 WebSocket髓涯,封裝了更多通用能力袒啼,且在不支持WebSocket的瀏覽器上,可以降級為輪詢方式通信纬纪。

優(yōu)點:成熟蚓再,開箱即用,兼容性好包各。

缺點:體積較大摘仅,前后端必須統(tǒng)一,即后端使用 socket.io 則前端必須使用socket.io-client 對應问畅。

作者:vivo 商業(yè)化大前端團隊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娃属,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子护姆,更是在濱河造成了極大的恐慌膳犹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件签则,死亡現(xiàn)場離奇詭異,居然都是意外死亡铐料,警方通過查閱死者的電腦和手機渐裂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钠惩,“玉大人柒凉,你說我怎么就攤上這事÷耍” “怎么了膝捞?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愧沟。 經(jīng)常有香客問我蔬咬,道長,這世上最難降的妖魔是什么沐寺? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任林艘,我火速辦了婚禮,結(jié)果婚禮上混坞,老公的妹妹穿的比我還像新娘狐援。我一直安慰自己钢坦,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布啥酱。 她就那樣靜靜地躺著爹凹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镶殷。 梳的紋絲不亂的頭發(fā)上禾酱,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音批钠,去河邊找鬼宇植。 笑死,一個胖子當著我的面吹牛埋心,可吹牛的內(nèi)容都是我干的指郁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拷呆,長吁一口氣:“原來是場噩夢啊……” “哼闲坎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茬斧,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤腰懂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后项秉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绣溜,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年娄蔼,在試婚紗的時候發(fā)現(xiàn)自己被綠了怖喻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岁诉,死狀恐怖锚沸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涕癣,我是刑警寧澤哗蜈,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站坠韩,受9級特大地震影響距潘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜只搁,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一绽昼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧须蜗,春花似錦硅确、人聲如沸目溉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缭付。三九已至,卻和暖如春循未,著一層夾襖步出監(jiān)牢的瞬間陷猫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工的妖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绣檬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓嫂粟,卻偏偏與公主長得像娇未,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子星虹,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容