2012-02-12 6 views
13

Socket.ioはそうのような設定ソケットごとの変数をお勧めします。Socket.io、socket.set()とsocketプロパティの違いは?

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

変数はまた、ソケット上に設定し、アクセスすることができます。

socket.foo = bar

使用する利点がありますset()関数を提供しましたか?

答えて

13

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; 
}; 
+0

+1のために関数定義を含める!だから、それは名前空間の衝突を避けることだけです。データストアを使用する他のメリットはありますか? – knite

+0

私が知る限り、衝突は主なものだと思います。 – JohnP

+11

また、この答えを拡張するために、get/set/delメソッドの理由はキー/値をアダプタに渡すことです。デフォルトではこれは 'MemoryStore'ですが、アダプタをmysql、redis、mongo等 – RobertPitt

2

私が主な理由は、そのソケットに接続されたデータは、マルチプロセス安全であると信じています。

アプリがシングルプロセスの場合、常に1つのプロセスになりますが、内部属性をオーバーライドしていないと確信していれば、socket.foo = barは問題ありません。将来の校正やベストプラクティスの問題としてget/setを使用するのが最良の方法です。

マルチプロセスの世界では、あるプロセスでsocket.foo = barを設定すると、別のプロセスでsocket.fooが定義されません。

関連する問題