Her*_*ler 15 node.js socket.io socket.io-1.0 socket.io-redis
文档说socket.io现在不支持.get .set
是否可以存储客户端相关数据,如
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
client['data'] = somedata;
});
});
Run Code Online (Sandbox Code Playgroud)
如果我需要多个节点?
jfr*_*d00 23
是的,可以向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];
});
});
Run Code Online (Sandbox Code Playgroud)
cod*_*aff 12
是的,只要没有其他具有相同名称的内置属性,这是可能的.
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;
});
});
Run Code Online (Sandbox Code Playgroud)
我建议采用另一种方式,但使用ECMAScript 6 弱映射
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);
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16297 次 |
最近记录: |