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

时间:2012-02-12 18:27:32

标签: javascript node.js socket.io

Socket.io建议设置每个套接字变量,如下所示:

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

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

socket.foo = bar

使用提供的set()函数有什么好处吗?

2 个答案:

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