1

我的团队正在构建一个 Android 应用程序,该应用程序将使用 websockets 与现有后端进行通信。我们选择使用 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);
}

onPongReceived方法只是打印到 Logcat

@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 回答