1

私のチームは、WebSocket を使用して既存のバックエンドと通信する Android アプリケーションを構築しています。この通信を処理するために、Koushik Dutta による AndroidAsync を使用することにしました。
接続がまだ生きているかどうかを確認するために、定期的に送信される ping を登録したいと思います。Wireshark を使用してネットワーク トラフィックをチェックしています。これは、Wireshark が表示している結果のスクリーンショットです。

Wireshark のスクリーンショット

ここに表示される内容から、ping が送信され、pong が受信されていると考えられます。
私のコードのスニペットは次のとおりです。

private void keepAlive() {
    ScheduledExecutorService scheduler =
            Executors.newSingleThreadScheduledExecutor();
    Runnable runnable = new Runnable() {
        public void run() {
            Log.d(TAG, "Pinging...");
            WebSocketHandler.this.webSocket.ping("LALALA");
        }
    };
    pingScheduledFuture = scheduler.scheduleAtFixedRate(runnable, 0, PING_PERIOD,
            TimeUnit.SECONDS);
}

メソッドはonPongReceivedLogcatに出力するだけです

@Override
public void onPongReceived(String s) {
    // TODO here I'm aware if connection is still alive
    Log.d(TAG, "Pong received! " + s);
}

ただし、Pong received!印刷されることはありません。また、そこにブレークポイントを設定すると、その時点でアプリの実行が停止することは
ありません。
よろしくお願いいたします。

4

2 に答える 2

2

私はよく知りませんが、ポンを受信するにはコールバックをどこかAsyncSocketに登録する必要があることを簡単にグーグルで明らかにしました。setPongCallback()あなたはこれをやっていますか?多くのコードを表示していません。

于 2015-03-05T15:13:34.023 に答える
1

問題は非常に不自由でしたが、これが解決策です。次のように、コールバックを websocket に設定するのを忘れていました。

WebSocketHandler.this.webSocket.setPongCallback(WebSocketHandler.this);

そして、ポンは正しく受信されました。

于 2015-03-05T15:13:49.577 に答える