NodeJS結合express使用websocket

NodeJS結合express使用websocket


如需轉載請標明出處:http://blog.csdn.net/itas109
QQ技術交流羣:129518033

相關問題:
NULL


前言

WebSocket 是 tcp/ip 協議之上的一個 Socket 協議,是爲了解決服務器向瀏覽器主動推送的場景而生。本文主要講述一下使用 express-ws 在 NodeJs 中如何結合 express 使用 webSocket。

1.基本使用

要想使用 express-ws,首先要安裝 express 以及 express-ws:

npm i -S express express-ws

然後,將上面兩個包引入到我們的主模塊 app.js 中,並創建服務:

var express = require('express');
var expressWs = require('express-ws');

var app = express();

接下來一部就是最重要的一步了,執行我們引入的 expressWs 方法將 app 對象傳入:

expressWs(app);
通過執行以上的方法,會在現有的 app 實例上綁定 websocket 協議的封裝方法,在調用該方法時,其語法類似 express 提供的 get、post、put 等方法:

app.ws('/socketTest', function (ws, req){
    ws.send('你連接成功了')
    ws.on('message', function (msg) {
        // 業務代碼
        ...
    })
})

回調函數中,我們可以拿到兩個參數:

  • ws:websocket 實例,該實例可以監聽來自客戶端的消息發送事件(message 事件)
  • req:瀏覽器請求(request)實例,我們可以通過解析這個對象拿到相應的參數

ws 實例提供了 send 方法,用於向瀏覽器 socket 發送數據。通過監聽 message 事件,我們可以拿到瀏覽器通過 websocket 爲我們發送的數據。

2.模塊化開發

一般在大型應用中,我們不會將所有的代碼都寫在一個文件中,所以 express 爲我們提供了模塊化路由。在模塊化路由中,express 允許我們創建一個迷你 app 實例,最後將其掛載於我們的主模塊實例上即可。如果我們想單獨在 module1 模塊上實現 websocket,該怎麼辦呢?之前在 npmjs 的文檔上沒有查到方法,經過一番試驗後發現,需要分別在主模塊的 app 以及 module1 模塊的子路由中分別進行綁定,纔可以開開心心地在 module1 中使用 ws 方法:

// module1.js
var express = require('express');
var expressWs = require('express-ws');

var router = express.Router();
expressWs(router);

router
  .ws('/user', function (ws, req){
      ws.on('message', function (msg) {
          // 業務代碼
          ...
      })
   })
  .get('/user', function(req, resp) {
  })
  .post('/user', function(req, resp) {
  })
  ...

module.exports = router;
// app.js
var express = require('express');
var expressWs = require('express-ws');
var module1 = require('module1');

var app = express();
expressWs(app);
app.use('/ifc', module1);

app.listen(8080);

3.如果結合 http 模塊使用

將 httpsServer 作爲 express-ws 的第二個參數使用,使用於 http 和 https

var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8443);
var expressWss = require('express-ws')(app, httpsServer);

如需轉載請標明出處:http://blog.csdn.net/itas109
QQ技術交流羣:129518033


License

License under CC BY-NC-ND 4.0: 署名-非商業使用-禁止演繹


Reference:
NULL

發佈了225 篇原創文章 · 獲贊 220 · 訪問量 84萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章