【发布时间】:2012-03-04 07:36:24
【问题描述】:
Socket.io 建议设置每个套接字变量,如下所示:
socket.set('foo', bar, function () {});
也可以在套接字上设置和访问变量:
socket.foo = bar
使用提供的 set() 函数有什么好处吗?
【问题讨论】:
标签: javascript node.js socket.io
Socket.io 建议设置每个套接字变量,如下所示:
socket.set('foo', bar, function () {});
也可以在套接字上设置和访问变量:
socket.foo = bar
使用提供的 set() 函数有什么好处吗?
【问题讨论】:
标签: javascript node.js socket.io
调用socket.foo 将您的属性设置在套接字对象本身上。不建议这样做,因为您可能会覆盖套接字使用和依赖的内部属性。当您调用 socket.set() 时,它会存储在不会与内部属性冲突的内部数据结构中。
https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246
Socket.prototype.set = function (key, value, fn) {
this.store.set(key, value, fn);
return this;
};
【讨论】:
MemoryStore,但您可以轻松更改mysql、redis、mongo等的适配器
我认为主要原因是附加到套接字的数据是多进程安全的。
如果您的应用程序是单进程,则始终是单进程,并且您确定没有覆盖内部属性,socket.foo = bar 就可以了。作为面向未来和最佳实践的问题,最好还是使用 get/set。
在多进程世界中,如果您在一个进程中设置socket.foo = bar,那么在另一个进程中socket.foo 将是未定义的。
【讨论】: