web-dev-qa-db-ja.com

socket.ioカスタムイベントの確認

Socket.emit呼び出しを確認するメソッドを探しています。

socket.emit('message', msg);

レシーバーが確認として別のカスタムイベントを送信するメカニズムを見てきましたが、これにより、チャットアプリケーションに数千のトランスポートが追加されます。効率的な方法をアドバイスしてください。

28
Vipin Kp

Emitメソッドの3番目の引数は、サーバーに渡されるコールバックを受け入れます。これにより、必要なデータで確認応答を呼び出すことができます。これは実際に非常に便利であり、ペアの呼び出し応答イベントを用意する手間を省きます。

テストしたばかりのコードで回答を更新しています。

まずサーバー側:

   io.sockets.on('connection', function (sock) {

    console.log('Connected client');
    sock.emit('connected', {
        connected: 'Yay!'
    });

    // the client passes 'callback' as a function. When we invoke the callback on the server
    // the code on the client side will run
    sock.on('testmessage', function (data, callback) {
        console.log('Socket (server-side): received message:', data);
        var responseData = {
            string1: 'I like ',
            string2: 'bananas ',
            string3: ' dude!'
        };
        //console.log('connection data:', evData);
        callback(responseData);
    });
});

クライアント側:

console.log('starting connection...');
var socket = io.connect('http://localhost:3000');
socket.on('error', function (evData) {
    console.error('Connection Error:', evData);
});
// 'connected' is our custom message that let's us know the user is connected
socket.on('connected', function (data) {
    console.log('Socket connected (client side):', data);

    // Now that we are connected let's send our test call with callback
    socket.emit('testmessage', {
        payload: 'let us see if this worketh'
    }, function (responseData) {
        console.log('Callback called with data:', responseData);
    });
});
42
ragamufin