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形式を取得します。
エラーはスローされず、フォーマットは単に設定されていません。
はい、それは予想されます。
関連するコミットは次のとおりです: https :
したがって、 generateId
メソッドはv3でも引き続き機能しますが、ソケットのid
属性ではなく、 sid
クエリパラメーターにのみ影響するようになりました。
あなたのユースケースは何ですか?
ああ、大丈夫! 情報をありがとう。
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-おっと、はい、そうです。 ありがとうございました。