Socket.IO 中间件有哪些应用场景
在 Socket.IO 中,中间件(Middleware)可以用于在客户端和服务端之间处理数据。以下是几种常见的 Socket.IO 中间件场景:
- 认证中间件:用于在客户端连接时进行身份验证,例如检查用户的登录状态或权限。可以使用 socket.use() 方法将一个或多个中间件附加到 Socket.IO 实例上。
- 路由中间件:用于在客户端和服务端之间转发数据。例如,可以为不同类型的消息设置不同的路由,并将其发送到不同的处理程序中。
- 日志记录中间件:用于记录客户端和服务端之间的通信。可以使用 socket.on() 方法监听所有的 Socket.IO 事件,并将其记录到文件或数据库中。
- 压缩中间件:用于压缩传输的数据,以减少网络带宽的占用。
- 数据库中间件:用于将数据存储到数据库中,或从数据库中读取数据。例如,可以使用 MongoDB 或 Redis 存储 Socket.IO 中的数据。
需要注意的是,Socket.IO 中的中间件是基于事件的,因此它们只能处理与 Socket.IO 相关的事件,而不能处理 HTTP 请求或其他类型的事件。此外,Socket.IO 中的中间件和 Express 中的中间件并不相同,它们之间的用法和行为也有所不同。
io.use((socket, next) => {
const token = socket.handshake.query.authorization.split(' ')[1]
console.log(`Authorization: Bearer ${token}`)
next()
// next(new Error("invalid"));
});
io.use((socket, next) => {
const token = socket.handshake.auth.token;
console.log('token:', token)
next()
});
const token = 'your_auth_token'
const socket = io.connect('http://localhost:3000', {
auth: {
token
},
query: {
authorization: `Bearer ${token}`
}
})
// client-side
socket.on("connect_error", (err) => {
console.log(err.message); // prints the message associated with the error
});