在 v2.3.0 中设置io.engine.generateId
时,套接字 id 会相应设置。
在 3x(在 3.0.0 和 3.0.3 上测试)中,它们不是。
在 Node.js 中:
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const { v4: uuidv4 } = require('uuid');
io.engine.generateId = function (req)
{
return uuidv4();
}
在 v2.3.0 中工作时,套接字 id 的预期格式应该是,在这种情况下,“xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,是 x 字母数字。 相反,我获得了默认的套接字 ID 格式。
不会抛出任何错误,只是没有设置格式。
哦好的! 谢谢(你的)信息。
我正在重用id
将它传输到其他客户端以使用 peer.js 进行视频通话,但 peer.js 不喜欢它的格式。
但是我刚刚在提交中看到您提到出于安全原因我不应该这样做,所以我想我可以关闭这个问题。
谢谢!
我认为应该重新打开这个问题(或创建一个新问题),因为在 3.0 版中,似乎没有调用 generateId 函数。 我知道它不再替换 socket.id 属性,但@darrachequesne较早的评论表明它正在更改不同的属性。
但是,根据文档,执行以下操作:
const content = require('fs').readFileSync(__dirname + '/index.html', 'utf8');
const httpServer = require('http').createServer((req, res) => {
// serve the index.html file
res.setHeader('Content-Type', 'text/html');
res.setHeader('Content-Length', Buffer.byteLength(content));
res.end(content);
});
const io = require('socket.io')(httpServer);
io.engine.generateId((req) => {
console.log('This line is never executed');
return new Date().valueOf().toString()
});
io.on('connection', socket => {
console.log('connect');
console.log(socket.sid);
});
httpServer.listen(3000, () => {
console.log('go to http://localhost:3000');
});
该函数永远不会被调用。
@BrianHVB我认为您的代码示例中有一个错字:
io.engine.generateId = ((req) => {
console.log('This line is never executed');
return new Date().valueOf().toString()
});
你能确认它解决了这个问题吗?
@darrachequesne - 糟糕,是的,确实如此。 谢谢你。