Android - Как долго оставаться на связи с сервером - PullRequest
2 голосов
/ 25 марта 2012

Я написал чат-приложение для Android, используя SocketChannel. Он успешно соединяется с сервером и все функции работают. Но после долгого времени, прошедшего после входа в систему (около 2-3 часов), я снова пытаюсь отправить сообщение чата, и оно не удается. В файле журнала SocketChannel, селектор все еще открыт и подключается к серверу, сообщение уже успешно записано. В чем проблема? Чего мне не хватает?

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2014

У меня была такая же проблема с SocketChannel.Я использовал библиотеку на основе SocketChannel для подключения к веб-сокету из приложения andoird (библиотека Autobahn websocket ).Я могу успешно подключиться к веб-сокету и отправлять / получать сообщения через веб-сокет.Но через некоторое время (может быть через 30 минут, 1 или 2 часа) соединение с веб-сокетом зависает.В соответствии с вашим сценарием, журналы кажутся сокетным соединением все еще открытым и соединяются с сервером, сообщение уже успешно записано.Но сервер не будет получать сообщения.

В моем случае проблема не с SocketChannel.Проблема с тайм-аутом TCP.Чтобы сохранить соединение живым, я отправляю сообщение о пероидальном пинге с сервера на клиент.Веб-сокет по умолчанию поддерживает эти сообщения, вызывая сообщения PING / PONG .Это сообщение ping необходимо периодически отправлять клиентам, чтобы поддерживать соединение.При получении сообщения ping клиент автоматически отвечает на сообщение PONG .Благодаря такому подходу я смог долго поддерживать сокетное соединение.

Подробнее об этом подходе Решение для зависания веб-сокета , Веб-сокеты.Потеря интернета, сообщений поддержки активности, архитектуры приложений и т. Д. , протокол веб-сокета и сообщения пинг / понг

Надеюсь, это поможет вам (даже если вы не используете веб-сокет),Подход может быть таким же в веб-сокете, как и в вашем приложении чата.

0 голосов
/ 25 марта 2012

Если вы хотите создать чат для Android или что-то еще с помощью push с сервера, попробуйте его с MQTT

http://tokudu.com/2010/how-to-implement-push-notifications-for-android/

это очень крутая вещь, просто посмотрите на нее: -)

...