Socket.ioはそうのような設定ソケットごとの変数をお勧めします。Socket.io、socket.set()とsocketプロパティの違いは?
socket.set('foo', bar, function() {});
変数はまた、ソケット上に設定し、アクセスすることができます。
socket.foo = bar
使用する利点がありますset()関数を提供しましたか?
Socket.ioはそうのような設定ソケットごとの変数をお勧めします。Socket.io、socket.set()とsocketプロパティの違いは?
socket.set('foo', bar, function() {});
変数はまた、ソケット上に設定し、アクセスすることができます。
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;
};
私が主な理由は、そのソケットに接続されたデータは、マルチプロセス安全であると信じています。
アプリがシングルプロセスの場合、常に1つのプロセスになりますが、内部属性をオーバーライドしていないと確信していれば、socket.foo = bar
は問題ありません。将来の校正やベストプラクティスの問題としてget/setを使用するのが最良の方法です。
マルチプロセスの世界では、あるプロセスでsocket.foo = bar
を設定すると、別のプロセスでsocket.foo
が定義されません。
+1のために関数定義を含める!だから、それは名前空間の衝突を避けることだけです。データストアを使用する他のメリットはありますか? – knite
私が知る限り、衝突は主なものだと思います。 – JohnP
また、この答えを拡張するために、get/set/delメソッドの理由はキー/値をアダプタに渡すことです。デフォルトではこれは 'MemoryStore'ですが、アダプタをmysql、redis、mongo等 – RobertPitt