2012-03-25 6 views
2

Ich schrieb eine Chat-Anwendung für Android mit SocketChannel. Es verbindet sich erfolgreich mit dem Server und alle Funktionen funktionieren. Aber nach einer langen Zeit, seit ich mich eingeloggt habe (ca. 2-3 Stunden), versuche ich erneut eine Chat-Nachricht zu senden und es schlägt fehl. In der Protokolldatei, SocketChannel, Selektor noch geöffnet und Verbindung zum Server, Nachricht bereits erfolgreich schreiben. Was ist das Problem? Was vermisse ich?Android - Wie lange Verbindung mit dem Server zu halten

Vielen Dank im Voraus für Ihre Hilfe.

+0

Ich habe das gleiche Problem und ich habe keine Lösung gefunden. Ich suche jetzt seit 6 Monaten. – Joel

Antwort

0

wenn Sie wollen von einem Server einen Chat für Android oder etwas anderes mit Push zu schaffen, versuchen Sie es mit MQTT

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

sein eine sehr coole Sache ist, nehmen Sie nur einen Blick auf sie: -)

+0

Danke für die Antwort! Dieses Tutorial verwendet Socket, nicht SocketChannel. Also ich denke, es ist mit Push-Benachrichtigung mehr als Chat geeignet. Beide verwenden Infinitiv-Schleife für den Empfang von Nachrichten vom Server, aber mit SocketChannel und Selektor, können wir warten, bis Chaos vor der nächsten Schleife kommen – Sephiroth

3

Ich hatte ein ähnliches Problem mit SocketChannel. Ich habe SocketChannel basierte Bibliothek verwendet, um eine Verbindung zu einem Websocket von andird Anwendung herzustellen (Die Bibliothek ist Autobahn websocket). Ich kann erfolgreich Verbindung zum Web-Socket herstellen und kann Nachrichten über den Websocket senden/empfangen. Aber nach einiger Zeit (vielleicht nach 30 Minuten, 1 oder 2 Stunden) hängt die Websocket-Verbindung. Wie Ihr Szenario, Protokolle scheint Socket-Verbindung ist noch offen und Verbindung zum Server, Nachricht bereits erfolgreich schreiben. Aber der Server empfängt die Nachrichten nicht.

In meinem Szenario ist Problem nicht mit dem SocketChannel. Problem ist mit TCP-Timeout. Um die Verbindung aufrecht zu erhalten, sende ich eine peroidische Ping-Nachricht vom Server zum Client. Web-Socket-Standard unterstützt diese Nachrichten Anruf PING/PONG Nachrichten. Diese Ping-Nachricht muss in regelmäßigen Abständen an Clients gesendet werden, um die Verbindung aufrecht zu erhalten. Wenn Ping-Nachricht empfängt Client antwortet automatisch PONG Nachricht an den Server. Mit diesem Ansatz konnte ich die Socket-Verbindung lange halten.

Weitere Informationen zu diesem Ansatz Solution for websocket hanging, Websockets. Loss of internet, keep-alive messages, app architecture etc, websocket protocol and ping/pong messages

Hoffnung Sie dies helfen würde (auch wenn Sie nicht websocket verwenden). Der Ansatz könnte sowohl in Websocket als auch in Ihrer Chat-Anwendung gleich sein.