0

私は node.js (socket.io を使用) でサーバーを作成していますが、この特定の問題は長い間私を悩ませてきました。ソケット接続用の簡単に拡張可能なハンドラーを作成して、それぞれの接続を別の関数にルーティングしました。

... <previous code> ...
var socketHandlers = {
                        'chat':chat.onMessage,
                        'chatNameRequest':chat.onNameRequest,
                        'changeRooms':commands.onPlayerRoomChange,
                        'commandEnter':commands.onCommandEnter
                    };

io.sockets.on('connection', function (socket) {
    console.log("New client connected.");

    // add all handlers to this socket when connected
    for (var handler in socketHandlers) {
        socket.on(handler, function(data) {
            console.log("Resolved handler for " + handler + ", called function " + socketHandlers[handler]);

            // sanitize each handler before sending it to the inner functions
            // leave more specific sanitization for the inner function
            data = valid.cleanData(data);
            socket = valid.cleanSocket(socket);

            // finally send it to the inner functions
            socketHandlers[handler](socket, data);
        });
    }
});

ただし、機能していないようです。これは、サーバーからのコンソール出力です。

   debug - flashsocket received data packet 5:::{"args":{"name":"Timothy"},"name":"chatNameRequest"}
Resolved handler for commandEnter, called function function (socket, data) {
<function contents, etc>

ご覧のとおり、プログラムは「chatNameRequest」のリクエストを受け取りましたが、それを誤って「commandEnter」にルーティングしました。誰かがここで何が起こっているのかを明らかにすることができますか?

4

1 に答える 1

0

あなたのconsole.log出力を見てください。ソケットはメッセージを受け取りcommandEnter、それを正しいハンドラーにルーティングしました。クライアントコードを投稿しますか?

また、Pointy が述べたように、.bind( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind ) を調べる必要があります。おそらくすぐに必要になるでしょう。

于 2014-01-29T20:03:23.420 に答える