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
将是未定义的。