ドキュメントは、socket.ioは現在.get .setをサポートしていないと言います
次のようなクライアント関連データを保存しても大丈夫ですか
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
client['data'] = somedata;
});
});
複数のノードが必要な場合?
はい、socket.io socket
オブジェクトにプロパティを追加しても問題ありません。組み込みのプロパティまたはメソッドと競合する可能性がある名前を使用しないように注意する必要があります(先頭に下線を追加するか、何らかの名前接頭辞でそれらに名前を付けることをお勧めします)。ただし、ソケットは単なるJavascriptオブジェクトであり、既存のプロパティとの競合を引き起こさない限り、このようなプロパティを自由に追加できます。
これを行うには、socket.id
を独自のデータ構造のキーとして使用する他の方法があります。
var currentConnections = {};
io.sockets.on('connection', function (client) {
currentConnections[client.id] = {socket: client};
client.on('data', function (somedata) {
currentConnections[client.id].data = someData;
});
client.on('disconnect', function() {
delete currentConnections[client.id];
});
});
はい、同じ名前の組み込みプロパティが他にない限り可能です。
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
// if not client['data'] you might need to have a check here like this
client['data'] = somedata;
});
});
別の方法をお勧めしますが、ECMAScript 6 weak maps
var wm = new WeakMap();
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
wm.set(client, somedata);
// if you want to get the data
// wm.get(client);
});
client.on('disconnect', function() {
wm.delete(client);
});
});