Nodejs Express引入WebSocket

50 篇文章 1 订阅
11 篇文章 0 订阅
本文介绍了如何在Node.js中使用express-ws模块创建WebSocket服务,包括基本的配置、模块化开发和结合http模块的应用实例。重点讲解了如何在express应用中添加WebSocket支持,并演示了如何在子模块中管理和监听消息事件。
摘要由CSDN通过智能技术生成

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);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyinchi1988

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值