Socket.io建议使用以下方式设置每个套接字(socket)的变量:
socket.set('foo', bar, function () {});
变量也可以在套接字上进行设置和访问:
socket.foo = bar
使用提供的set()函数是否有好处?
Socket.io建议使用以下方式设置每个套接字(socket)的变量:
socket.set('foo', bar, function () {});
变量也可以在套接字上进行设置和访问:
socket.foo = bar
使用提供的set()函数是否有好处?
调用socket.foo
将在socket对象本身上设置您的属性。这不是推荐的做法,因为您可能会覆盖socket使用和依赖的内部属性。当您调用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;
};
我认为主要原因在于,这样可以使附加到套接字的数据具有多进程安全性。
如果您的应用程序是单进程,永远都是单进程,并且您确定没有覆盖内部属性,则socket.foo = bar
将是可以的。但从未来保护和最佳实践的角度考虑,最好还是使用get/set。
在多进程的世界中,如果您在一个进程中设置了socket.foo = bar
,那么在另一个进程中,socket.foo
将未定义。