Nodejs Express引入WebSocket

WebSocket是在TCP/IP协议之上的一个Socket协议,由于http/https只能有客户端发起请求到服务端,服务端无法主动发起请求到客户端,为了解决服务器向浏览器主动推送的场景。本文讲述一下在express-ws 在 NodeJs 中如何结合 express 引入 webSocket

1.基本使用


(1)安装Express-ws:

npm i express-ws

(2)引入到index.js中并创建服务:

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

var app = express();

(3)引入expressWs方法,app对象作为参数传入

expressWs(app);

(4)通过执行以上的方法,会在现有的 app 实例上绑定 websocket 协议的封装方法,在调用该方法时,语法类似 express 提供的 get、post、put 等方法:

app.ws('/socketTest', (ws, req)=>{
    // 返回给客户端
    ws.send('连接成功')
    // 监听 message 事件,拿到客户端通过 websocket 发送过来的数据
    ws.on('message', (msg)=> {
        // 业务代码
      
    })
})


回调函数中,有两个参数:

  • ws:websocket 实例 该实例可以监听来自客户端的消息发送事件(message 事件)。
  • req:浏览器请求(request)实例,我们可以通过解析这个对象拿到相应的参数。

ws 实例提供了 send 方法,用于向浏览器 socket 发送数据

通过监听 message 事件,我们可以拿到浏览器通过 websocket 为我们发送的数据。

2.模块化开发

一般在大型应用中,我们不会将所有的代码都写在一个文件中,express 为我们提供了模块化路由。在模块化路由中,express 允许我们创建一个迷你 app 实例,最后将其挂载于我们的主模块实例上即可。

如果我们想单独在 module1 模块上实现 websocket,需要分别在主模块的 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);

你可能感兴趣的:(服务端,前端,测试工具,websocket,前端,javascript)