SocketChannel を使用して Android 用のチャット アプリケーションを作成しました。サーバーと正常に接続し、すべての機能が動作します。しかし、ログインしてからかなり時間がたってから (約 2 ~ 3 時間)、再度チャット メッセージを送信しようとすると失敗します。ログ ファイルでは、SocketChannel、セレクターがまだ開いていて、サーバーに接続しています。メッセージは既に正常に書き込まれています。どうしたの?私は何が欠けていますか?
よろしくお願いします。
SocketChannel を使用して Android 用のチャット アプリケーションを作成しました。サーバーと正常に接続し、すべての機能が動作します。しかし、ログインしてからかなり時間がたってから (約 2 ~ 3 時間)、再度チャット メッセージを送信しようとすると失敗します。ログ ファイルでは、SocketChannel、セレクターがまだ開いていて、サーバーに接続しています。メッセージは既に正常に書き込まれています。どうしたの?私は何が欠けていますか?
よろしくお願いします。
SocketChannel でも同じような問題がありました。SocketChannel ベースのライブラリを使用して、andoird アプリケーションから Websocket に接続しました (ライブラリはAutobahn websocketです)。Web ソケットに正常に接続でき、Web ソケットを介してメッセージを送受信できます。しかし、しばらくすると (30 分後、1 時間後、2 時間後など)、websocket 接続がハングします。あなたのシナリオとして、ログはソケット接続がまだ開いていてサーバーに接続しているようで、メッセージはすでに正常に書き込まれています。しかし、サーバーはメッセージを受信しません。
私のシナリオでは、問題は SocketChannel にはありません。問題は TCP タイムアウトにあります。接続を維持するために、サーバーからクライアントに定期的な ping メッセージを送信しています。Web ソケットの既定のサポートは、このメッセージを呼び出すPING/PONGメッセージです。この ping メッセージは、接続を維持するために定期的にクライアントに送信する必要があります。ping メッセージを受信すると、クライアントは自動的にPONGメッセージをサーバーに返信します。このアプローチを使用することで、ソケット接続を長時間維持することができました。
このアプローチの詳細については 、Websocketハングのソリューション、Websocket を参照してください。インターネットの喪失、キープアライブ メッセージ、アプリ アーキテクチャなど、websocket プロトコルおよび ping/pong メッセージ
これがあなたに役立つことを願っています(Websocketを使用していなくても). アプローチは、websocket とチャット アプリケーションで同じである可能性があります。
サーバーからのプッシュを使用してAndroidなどのチャットを作成する場合は、MQTTで試してください
http://tokudu.com/2010/how-to-implement-push-notifications-for-android/
それはとてもクールなことです、ただそれを見てください:-)