我的团队正在构建一个Android应用程序,它将使用websockets与现有后端进行通信。我们选择使用Koushik Dutta的AndroidAsync来处理这种沟通 我想注册定期发送的ping,以检查连接是否仍然存在。我正在使用Wireshark来检查网络流量。这是Wireshark显示结果的屏幕截图:
从我在这里看到的情况来看,我相信正在发送ping,正在收到乒乓 我的代码片段是:
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!
!此外,如果我在那里放置一个断点,应用程序将永远不会停止执行该点
任何人都知道我在这里可能会缺少什么?
最好的问候和提前感谢
答案 0 :(得分:2)
我不熟悉AsyncSocket
但快速谷歌透露,您必须在某处注册回调setPongCallback()
才能收到您的乒乓球。你在做这个吗?你没有展示很多代码。
答案 1 :(得分:1)
问题非常严重,但这是解决方案。我忘了将回调设置为websocket,如下所示:
WebSocketHandler.this.webSocket.setPongCallback(WebSocketHandler.this);
然后,正确收到了这些拨号。