onPongReceived никогда не вызывается
Моя команда создает приложение для Android, которое будет использовать веб-сокеты для связи с существующим бэкэндом. Для решения этой проблемы мы решили использовать AndroidAsync от Koushik Dutta.
Я хотел бы зарегистрировать пинг для периодической отправки, чтобы проверить, живо ли соединение. Я использую Wireshark для проверки сетевого трафика. Это скриншот результата, который показывает Wireshark:
Из того, что я вижу здесь, я считаю, что пинг отправляется, а понг принимается.
Фрагмент моего кода:
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!
никогда не печатается! Кроме того, если я поставлю точку останова, приложение никогда не прекратит работу в этот момент.
У кого-нибудь есть идеи о том, что мне здесь не хватает?
С наилучшими пожеланиями и заранее спасибо
2 ответа
Я не знаком с AsyncSocket
но быстрый гугл показал, что вы должны зарегистрировать обратный звонок setPongCallback()
где-нибудь для вашего понга, который будет получен. Ты этим занимаешься? Вы не показываете много кода.
Проблема была чрезвычайно хромой, но вот решение. Я забыл установить обратный вызов для веб-сокета, например так:
WebSocketHandler.this.webSocket.setPongCallback(WebSocketHandler.this);
И тогда, понги были правильно приняты.