WebSocket的簡單演示

為什么需要 WebSocket?

初次接觸 WebSocket 的人显蝌,都會問同樣的問題:我們已經(jīng)有了 HTTP 協(xié)議殴胧,為什么還需要另一個協(xié)議?它能帶來什么好處挑宠?

答案很簡單,因為 HTTP 協(xié)議有一個缺陷:通信只能由客戶端發(fā)起颓影。

舉例來說各淀,我們想了解今天的天氣,只能是客戶端向服務(wù)器發(fā)出請求诡挂,服務(wù)器返回查詢結(jié)果碎浇。HTTP 協(xié)議做不到服務(wù)器主動向客戶端推送信息。

這種單向請求的特點(diǎn)璃俗,注定了如果服務(wù)器有連續(xù)的狀態(tài)變化奴璃,客戶端要獲知就非常麻煩。我們只能使用["輪詢"]每隔一段時候城豁,就發(fā)出一個詢問苟穆,了解服務(wù)器有沒有新的信息。最典型的場景就是聊天室唱星。

輪詢的效率低雳旅,非常浪費(fèi)資源(因為必須不停連接,或者 HTTP 連接始終打開)间聊。因此攒盈,工程師們一直在思考,有沒有更好的方法甸饱。WebSocket 就是這樣發(fā)明的沦童。

前端使用WebSocket的API

## WebSocket 屬性
readyState屬性返回實例對象的當(dāng)前狀態(tài)仑濒,共有四種。
0 CONNECTING 表示正在連接
1 OPEN 表示連接成功偷遗,可以通信了
2 CLOSING 表示連接正在關(guān)閉
3 CLOSED 表示連接已經(jīng)關(guān)閉墩瞳,或者打開連接失敗

回調(diào)函數(shù)

   socket.onopen=function(){
          console.log('建立連接');
           socket.send('連接上了');  //發(fā)送會話
          socket.close();
   }
    socket.onmessage=function(event){
          var data = event.data;
          console.log('接收會話');
   }
    socket.onerror=function(event){
          console.log('打印錯誤',event);
   }
  socket.onclose=function(event){
          console.log('關(guān)閉連接');
   }

以上回調(diào)函數(shù)也可以用事件監(jiān)聽處理函數(shù)來調(diào)用,例如:

socket.addEventListener('message',function(event){
         console.log(event.data);//do something
})

前端整體代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <p>首頁</p>
</body>

</html>
<script>
    var newWeb = function () {
        var url = "ws://10.20.23.115:8098/echo"
        console.log(url);
        var ws = new WebSocket(url);
        ws.onopen = function () {
            ws.send('老子終于連上了');
        }
        ws.onmessage = function (evt) {
            console.log(evt.data);
            ws.close();
        };
        ws.onclose = function (evt) {
            console.log("WebSocketClosed!");
        };
        ws.onerror = function (evt) {
            console.log('WebSocketError!');
        };
    }
    newWeb();
</script>

后端對websocket的處理

目前我是用node進(jìn)行配置

下載插件

 npm install express-ws

由于我用的是express框架,所以我用的是express-ws這個中間件,其他中間件的用法幾乎都是大同小異

var app = express();
var expressWs = require('express-ws')(app);
 
app.ws('/echo', function(ws, req) {
  ws.on('message', function(msg) {
    ws.send('進(jìn)來了');
  });
});

這里是直接寫在入口文件app.js中的,那么這里要值得注意的是要放在注冊路由前面


image.png

如果放在路由后面就會沒有效果,那么如果要在路由系統(tǒng)中使用也是可有的,注冊方式需要改變一下,在index.js路由文件里

var expressWs = require('express-ws')(router);
router.ws('/echo', function(ws, req) {
  ws.on('message', function(msg) {
    ws.send('進(jìn)來了');
  });
});

不過在app.js中也需要注冊一下app,例如 var expressWs = require('express-ws')(app);
啟動程序如圖


截圖錄屏_選擇區(qū)域_20201023132745.png

簡單的websocket實例算是跑通了,

dome地址
websocket知識點(diǎn)的延伸

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市氏豌,隨后出現(xiàn)的幾起案子喉酌,更是在濱河造成了極大的恐慌,老刑警劉巖泵喘,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泪电,死亡現(xiàn)場離奇詭異,居然都是意外死亡纪铺,警方通過查閱死者的電腦和手機(jī)相速,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲜锚,“玉大人突诬,你說我怎么就攤上這事∥叻保” “怎么了旺隙?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骏令。 經(jīng)常有香客問我蔬捷,道長,這世上最難降的妖魔是什么榔袋? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任周拐,我火速辦了婚禮,結(jié)果婚禮上摘昌,老公的妹妹穿的比我還像新娘速妖。我一直安慰自己高蜂,他們只是感情好聪黎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著备恤,像睡著了一般稿饰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上露泊,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天喉镰,我揣著相機(jī)與錄音,去河邊找鬼惭笑。 笑死侣姆,一個胖子當(dāng)著我的面吹牛生真,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捺宗,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柱蟀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚜厉?” 一聲冷哼從身側(cè)響起长已,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昼牛,沒想到半個月后术瓮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贰健,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年胞四,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伶椿。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡撬讽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悬垃,到底是詐尸還是另有隱情游昼,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布尝蠕,位于F島的核電站烘豌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏看彼。R本人自食惡果不足惜廊佩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望靖榕。 院中可真熱鬧标锄,春花似錦、人聲如沸茁计。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽星压。三九已至践剂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娜膘,已是汗流浹背逊脯。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竣贪,地道東北人军洼。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓巩螃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匕争。 傳聞我的和親對象是個殘疾皇子牺六,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354