onPongReceived 永远不会被调用
onPongReceived is never called
我的团队正在构建一个 Android 应用程序,它将使用 websockets 与现有后端进行通信。我们选择使用 Koushik Dutta 的 AndroidAsync 来处理这种通信。
我想注册一个定期发送的 ping,以检查连接是否仍然存在。我正在使用 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!
从未被打印出来!此外,如果我在那里放置一个断点,应用程序将永远不会在该点停止执行
有人知道我在这里可能遗漏了什么吗?
提前致以最诚挚的问候和感谢
我不熟悉 AsyncSocket
,但很快 google 发现您必须在某个地方注册回调 setPongCallback()
才能收到您的乒乓球。你在做这个吗?您没有显示很多代码。
这个问题非常蹩脚,但这是解决方案。我忘记给websocket设置回调了,像这样:
WebSocketHandler.this.webSocket.setPongCallback(WebSocketHandler.this);
然后,pong 就被正确接收了。
我的团队正在构建一个 Android 应用程序,它将使用 websockets 与现有后端进行通信。我们选择使用 Koushik Dutta 的 AndroidAsync 来处理这种通信。
我想注册一个定期发送的 ping,以检查连接是否仍然存在。我正在使用 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!
从未被打印出来!此外,如果我在那里放置一个断点,应用程序将永远不会在该点停止执行
有人知道我在这里可能遗漏了什么吗?
提前致以最诚挚的问候和感谢
我不熟悉 AsyncSocket
,但很快 google 发现您必须在某个地方注册回调 setPongCallback()
才能收到您的乒乓球。你在做这个吗?您没有显示很多代码。
这个问题非常蹩脚,但这是解决方案。我忘记给websocket设置回调了,像这样:
WebSocketHandler.this.webSocket.setPongCallback(WebSocketHandler.this);
然后,pong 就被正确接收了。