首页 > 解决方案 > Socket.IO 中间件,io.use

问题描述

开发基于 expressJS 和 Socket.io 的 Web 应用程序。在下面的文章中,我看到了中间件语法的用法,这对我来说是新的。下面是一个语法示例:

const io = require('socket.io')();

io.use(function(socket, next) {
  // execute some code
  next();
})
.on('connection', function(socket) {
    // Connection now authenticated to receive further events

    socket.on('message', function(message) {
        io.emit('message', message);
    });
});

它基本上在socket.io实例上使用中间件功能。我之前的理解是中间件只能用在 express 实例上(app.use(...))。

问题:

  1. 这种语法只是普通的中间件,其工作方式类似于app.use(...)
  2. 如果不同,有什么区别?

标签: javascriptnode.jsexpresswebsocketsocket.io

解决方案


io.use()允许您指定为每个新的传入 socket.io 连接调用的函数。它可以用于各种各样的事情,例如:

  1. 日志记录
  2. 验证
  3. 管理会话
  4. 速率限制
  5. 连接验证

等等...

它的目的类似于 Express 中间件(如 with app.use()),但这是用于传入的 socket.io 连接,而不是传入 Express 管理的常规 http 请求。如果您希望中间件处理传入的 http 请求,请使用 Express 中间件和app.use(). 如果您希望中间件处理传入的 socket.io 连接,请将 socket.io 中间件与io.use().


推荐阅读