Socket.io建议设置每个套接字变量,如下所示:
socket.set('foo', bar, function () {});
也可以在套接字上设置和访问变量:
socket.foo = bar
使用提供的set()函数有什么好处吗?
答案 0 :(得分:14)
调用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;
};
答案 1 :(得分:2)
我认为主要原因是附加到套接字的数据是多进程安全的。
如果您的应用程序是单个进程,则始终是单个进程,并且您确定没有覆盖内部属性,socket.foo = bar
会没问题。最好将get / set用作未来验证和最佳实践的问题。
在多进程世界中,如果您在一个进程中设置socket.foo = bar
,那么在另一个进程中socket.foo
将是未定义的。