使用多路复用
优质
小牛编辑
137浏览
2023-12-01
默认的,当连接道不同的命名空间后一个单一的链接将会被使用。
const socket = io();
const adminSocket = io('/admin');
// a single connection will be established
注意:重用相同的命名空间将会创建两个连接:
const socket = io();
const socket2 = io();
// will also create two distinct connections
自定义path
const socket = io('http://localhost', {
path: '/myownpath'
});
// server-side
const io = require('socket.io')({
path: '/myownpath'
});
这里,socket连接到admin命名空间,使用自定义的路径mypath。
请求地址看起来像这样:
localhost/mypath/?EIO=3&transport=polling&sid=<id>
命名空间将会作为数据的一部分被发送。
携带查询参数
const socket = io('http://localhost?token=abc');
// server-side
const io = require('socket.io')();
// middleware
io.use((socket, next) => {
let token = socket.handshake.query.token;
if (isValid(token)) {
return next();
}
return next(new Error('authentication error'));
});
// then
io.on('connection', (socket) => {
let token = socket.handshake.query.token;
// ...
});
携带查询选项
const socket = io({
query: {
token: 'cde'
}
});
查询内容可以在重新连接时更新:
socket.on('reconnect_attempt', () => {
socket.io.opts.query = {
token: 'fgh'
}
});