【问题标题】:onPongReceived is never calledonPongReceived 永远不会被调用
【发布时间】:2015-05-06 23:55:59
【问题描述】:

我的团队正在构建一个 Android 应用程序,该应用程序将使用 websocket 与现有后端进行通信。我们选择使用 Koushik Dutta 的 AndroidAsync 来处理这种通信。
我想注册一个定期发送的 ping,以检查连接是否仍然存在。我正在使用 Wireshark 来检查网络流量。这是 Wireshark 显示的结果的屏幕截图:

从我在这里看到的情况来看,我相信正在发送 ping,并且正在接收 pong。
我的代码的 sn-p 是:

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! 永远不会被打印出来!此外,如果我在那里设置断点,应用程序将永远不会停止执行该点
有人知道我在这里可能缺少什么吗?
提前致以最诚挚的问候和感谢

【问题讨论】:

    标签: android websocket androidasync-koush


    【解决方案1】:

    我不熟悉AsyncSocket,但一个快速的谷歌显示你必须在某处注册回调setPongCallback() 才能收到你的乒乓球。你在做这个吗?你没有显示很多代码。

    【讨论】:

    • 是的,这就是问题所在,我忘了设置 pongCallback。谢谢!
    【解决方案2】:

    这个问题非常糟糕,但这是解决方案。我忘了给 websocket 设置回调,像这样:

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

    然后,乒乓球被正确接收。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 2013-10-12
      • 2012-03-27
      • 2013-08-29
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多