2

Autobahn websocket ライブラリで実装された websocket サーバー、サーバー アプリ、および android アプリに接続する android アプリを作成しました。

サーバーと正常に接続してメッセージを交換できます。しかし、しばらくすると(20〜30分後)Androidアプリがサーバーとの通信を停止します(サーバーにメッセージを送信できません)。logcat では、サーバーにメッセージを送信できない場合でも、アプリは引き続き websocket に接続します。

Autobahn ライブラリのソース コードを調べたところ、 java.nio.channels.SocketChannelを使用して websocket に接続していることがわかりました。SocketChannels の使用に問題はありますか? (ここAndroid - How to keep connection with server for long timeから同様の問題を見つけました)

4

1 に答える 1

2

最後に、webscoket ping/pongメッセージを使用して問題を解決しました。

実際、問題は SocketChannel にはありません。私は SocketChannelを使用する代わりにプレーンSocketを試しました。Socketでも問題は解決しません。

これは私が使用したアプローチです...

Websocket 接続を維持するには、Websockt プロトコル (詳細は Websocket プロトコル ) のサポートを組み込んだ Ping/Pong メッセージを使用する必要があります。サーバーは定期的にpingメッセージをクライアントに送信する必要があります。サーバーから ping を受信すると、クライアントはpongメッセージで応答します。この方法を使用すると、接続を ling 時間維持できます。

この ping/pong メッセージに対する webscoket クライアントのサポートを構築するために使用した Autobahn ライブラリ。Websocket 経由で ping メッセージを受信すると、ライブラリは自動的に pong メッセージをサーバーに送信します。したがって、pong メッセージを手動で送信することを心配する必要はありません。ここから ping/pong メッセージの autobahn 実装を見つけることができます ( createHandler()メソッド内 - autobahn ping/pong implementation ) 。

このトピックの詳細については、このスレッドとWebsockets から入手できます。インターネットの喪失、キープアライブ メッセージ、アプリ アーキテクチャなど

于 2014-02-14T06:47:58.637 に答える