【问题标题】:Socket.io, difference between socket.set() and socket property?Socket.io,socket.set() 和套接字属性之间的区别?
【发布时间】:2012-03-04 07:36:24
【问题描述】:

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

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

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

socket.foo = bar

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

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    调用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 用于包含函数定义!所以这仅仅是避免命名空间冲突的问题吗?使用他们的数据存储还有其他好处吗?
    • 据我所知,我猜碰撞是主要的。
    • 也是为了扩展这个答案,get/set/del 方法的原因是将键/值传递给适配器,默认情况下这是一个MemoryStore,但您可以轻松更改mysql、redis、mongo等的适配器
    【解决方案2】:

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

    如果您的应用程序是单进程,则始终是单进程,并且您确定没有覆盖内部属性,socket.foo = bar 就可以了。作为面向未来和最佳实践的问题,最好还是使用 get/set。

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

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2011-06-22
      • 2012-08-27
      • 2011-02-02
      相关资源
      最近更新 更多