Socket.ioの例はすべてこのパターンに従います
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", function(myData){
...
});
});
これにより、接続ごとに新しいコールバック関数が作成されるように思われます。すべてのソケットが同じ方法でメッセージに応答すると仮定すると、次のようにすべてのソケットに対してハンドラーを1回定義する方がメモリ効率が高くなりません。
function myMessageHandler(data){
...
}
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", myMessageHandler);
});
またはこれさえ:
io.sockets.on("my message", function(mySocket, myData){
...
});
もしそうなら、なぜSocket.ioはメモリを浪費する方法を推奨するのでしょうか?「接続」コールバックのクロージャー内にソケットのステートフル変数を保持する必要がありますか?