22

socket.ioライブラリで送信されたメッセージがクライアントに受信されたことを確認する方法。socket.io に特別な方法はありますか?

回答ありがとうございます。

4

3 に答える 3

33

イベントハンドラーを定義するときは、コールバックパラメーターを使用する必要があります。

一般的な実装は次のとおりです。

クライアント側

var socket = io.connect('http://localhost');
socket.emit('set', 'is_it_ok', function (response) {
    console.log(response);
});

サーバ側

io.sockets.on('connection', function (socket) {
    socket.on('set', function (status, callback) {
        console.log(status);
        callback('ok');
    });
});

次に、サーバー側のコンソールを確認します。'is_it_ok'が表示されます。次に、クライアント側のコンソールを確認します。'ok'と表示されます。それが確認メッセージです。

アップデート

socket.io接続は基本的に永続的です。次の組み込み関数を使用すると、接続の状態に基づいてアクションを実行できます。

socket.on('disconnect', function() {} ); // wait for reconnect
socket.on('reconnect', function() {} ); // connection restored  
socket.on('reconnecting', function(nextRetry) {} ); //trying to reconnect
socket.on('reconnect_failed', function() { console.log("Reconnect failed"); });

上記のコールバックオプションの使用は、事実上、次の2つの手順を組み合わせたものです。

socket.emit('callback', 'ok') // happens immediately

そしてクライアント側で

socket.on('callback', function(data) {
    console.log(data);
});

したがって、タイマーを使用する必要はありません。接続に次の状態のいずれかがある場合を除いて、コールバックはすぐに実行されます-'disconnect'、'reconnecting'、'reconnect_failed'。

于 2012-07-08T11:51:45.080 に答える
1

.send()またはメソッド呼び出しの最後のパラメーターとして関数を追加する.emit()と、相手がメッセージを受信したときにこの関数が呼び出されます。

socket.send('hi', function() {
    // if we are here, our salutation has been received by the other party.
});
于 2012-07-08T11:49:42.197 に答える