javascript - 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(...)
)。
问题:
- 这种语法只是普通的中间件,其工作方式类似于
app.use(...)
? - 如果不同,有什么区别?
解决方案
io.use()
允许您指定为每个新的传入 socket.io 连接调用的函数。它可以用于各种各样的事情,例如:
- 日志记录
- 验证
- 管理会话
- 速率限制
- 连接验证
等等...
它的目的类似于 Express 中间件(如 with app.use()
),但这是用于传入的 socket.io 连接,而不是传入 Express 管理的常规 http 请求。如果您希望中间件处理传入的 http 请求,请使用 Express 中间件和app.use()
. 如果您希望中间件处理传入的 socket.io 连接,请将 socket.io 中间件与io.use()
.
推荐阅读
- swift - 更新依赖项中的变量后如何触发方法?
- php - Wordpress 高级自定义字段图像显示 h 并且未显示在前端
- python - Path 和 sys.path 不同,使用相同的虚拟环境
- recursion - 使用实际数据库在 EF Core 中实现递归属性加载
- python - 不明白如何使用 zip(*) 解压缩数据
- woocommerce - 如何在产品页面上隐藏通知
- python - 无效的 CSRF 令牌,即使它是有效的
- java - 多对多关系的 JPA 派生删除查询
- python - Doc2Vec 模型不产生预期的相似性分数
- android-studio - AutoCompleteTextView 向上显示列表