Socket.io,socket.set()和套接字属性之间的区别?

Socket.io推荐设置每个套接字variables,如下所示:

socket.set('foo', bar, function () {});

variables也可以在套接字上设置和访问:

socket.foo = bar

使用提供的set()函数有没有好处?

调用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; }; 

我相信主要的原因是附加到套接字的数据是多进程安全的。

如果您的应用程序是单一进程,则始终是单一进程,并且您确定不会覆盖内部属性, socket.foo = bar会很好。 作为未来的保证和最佳实践,最好使用get / set。

在多进程的世界里,如果你在一个进程中设置了socket.foo = bar ,那么在另一个进程中, socket.foo将是未定义的。