Socket.IO中间件io.use

Wil*_*een 5 javascript websocket node.js express socket.io

在基于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);
    });
});
Run Code Online (Sandbox Code Playgroud)

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

问题:

  1. 这个语法只是正常的中间件app.use(...)吗?
  2. 如果不同,有什么不同?

jfr*_*d00 11

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

  1. 记录中
  2. 认证方式
  3. 管理会议
  4. 限速
  5. 连接验证

等等...

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

  • 非常感谢!有时Socket.io可以使用更多的IMO文档。 (3认同)
  • 请注意,与Express中间件不同,套接字中间件在新连接上只能被调用一次。因此,使用它进行身份验证非常有限。它只能验证初始连接,不能验证任何后续通信。 (2认同)