2012-03-25 4 views
2

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

Заранее за вашу помощь.

+0

У меня такая же проблема, и я не нашел решения. Я искал 6 месяцев. – Joel

ответ

0

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

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

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

+0

Спасибо за ответ! В этом руководстве используется Socket, а не SocketChannel. Поэтому я думаю, что он подходит с push notifucation больше, чем чат. Оба из них используют бесконечный цикл для приема сообщения с сервера, но с SocketChannel и селектором, мы можем дождаться, когда беспорядок придет до следующего цикла – Sephiroth

3

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

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

Более подробная информации об этом подходе Solution for websocket hanging, Websockets. Loss of internet, keep-alive messages, app architecture etc, websocket protocol and ping/pong messages

Надеется, что это поможет вам (даже если вы не используете WebSocket). Такой подход может быть таким же, как в websocket, так и в приложении для чата.

Смежные вопросы