NodeJS结合express使用websocket

NodeJS结合express使用websocket


如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

文章目录

  • NodeJS结合express使用websocket
    • @[toc]
    • 前言
    • 1.基本使用
    • 2.模块化开发
    • 3.如果结合 http 模块使用

相关问题:
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

你可能感兴趣的:(NodeJS,express-ws,nodejs-ws,node-websocket,websocket)