Android アプリで使用する WebSocket ライブラリはどれですか? [closed] 質問する

Android アプリで使用する WebSocket ライブラリはどれですか? [closed] 質問する

追加したいサービスバックグラウンドで実行されているAndroidアプリにウェブソケット接続(数時間または数日かかる場合もあります)を継続し、定期的にデータをサーバーに送信します。

現在、Java 用の WebSocket ライブラリが多数あるようですが、どれを使用すればよいかわかりません。

さらに、ネイティブのソケット.ioAndroid 用クライアント ライブラリ:

  • nkzawa/socket.io-client.javaGitHub からの説明: Socket.IO v1.0 以降と互換性のある、Java 用のフル機能の Socket.IO クライアント ライブラリ。

いずれにせよ、Web フロントエンドには nodejs/socket.io を使用する予定なので、socket.io Android クライアントを使用すると便利です。ただし、ネイティブ クライアントはまだ新しいため、未解決の問題がいくつかあります。さらに、WebSocket サポートはクライアント側で保証できるため、Android アプリでは socket.io クライアント ライブラリを使用するメリットはない (socket.io 1.0 サーバーとの互換性は別) と理解しています。

私の要件は次のとおりです。

  • Android API 9以降との互換性
  • SSL経由で接続可能
  • 永久的なウェイクロックを保持することなく、長時間接続を維持する
  • 利用可能なNode.js WebSocketサーバー実装またはsocket.ioとの互換性

これらの要件に適したライブラリはどれでしょうか?

ベストアンサー1

いくつかのメモ。

  • koush/AndroidAsync実行しない握手を閉じるこれはRFC 6455。 見るこれ詳細については。

  • プロジェクト・タイラスAndroidでも動作しますが、ライセンスを確認してください(CDDL 1.1 および GPL 2 (CPE 付き))とその大きさ(ProGuard で WebSocket クライアント jar のサイズを削減する) が要件を満たしているかどうかを確認してください。また、テキストサイズが大きい場合、Tyrus は例外をスローする可能性があることに注意してください (おそらくバグです)。これ詳細については。

  • 桟橋: 2年前メールスレッドjetty-usersメーリングリストでは「現在、Android 互換の Jetty 9 WebSocket クライアントはありません。Android での使用のために Jetty WebSocket クライアントを JDK 7 から JDK 5/6 にバックポートする計画はありますが、JSR-356 Java WebSocket API (javax.websocket) の実装を完了することよりも優先度は低くなります。」ジェティの現在の書類WebSocket クライアント API については Android については何も言及されていません。

  • codebutler/android-websocket実行しない握手を閉じるこれはRFC 6455閉じるときに例外がスローされる可能性があります。これ

  • 雰囲気/wasync用途非同期Httpクライアント/非同期 HTTP クライアントWebSocket 実装として。したがって、代わりに AsyncHttpClient/async-http-client について言及する必要があります。

  • ファイアベース/チューブソック検証しませんSec-WebSocket-Accept。これは違反ですRFC 6455また、TubeSock にはテキストメッセージの作成時にバグがあります。テキストメッセージにマルチバイト UTF-8 文字を使用すると、遅かれ早かれこのバグに遭遇することになります。第3号delight-im/Android-DDPTubeSock の問題に関する長いリスト。

検討ポイント

Java で記述された WebSocket クライアント実装を選択する際の考慮事項:

  1. コンプライアンス実装されていないものも少なくありません。握手を閉じるによって要求されるRFC 6455(クロージングハンドシェイクが実装されていない場合はどうなるでしょうか?これ
  2. 必要なJavaバージョンJava SE 5、6、7、8、それとも Java EE? Android でも動作しますか?
  3. サイズ一部の実装には多くの依存関係があります。
  4. wssサポート。
  5. HTTP プロキシサポート。
  6. HTTPプロキシ経由のwssサポート。図2を参照HTML5 Web ソケットがプロキシ サーバーとやり取りする方法WebSocket クライアント ライブラリが HTTP プロキシ経由で wss をサポートするために何を行う必要があるかについて。
  7. SSL構成の柔軟性不必要な制限なく利用できる必要がありSSLSocketFactoryます。SSLContext
  8. カスタムHTTPヘッダーオープニングの握手基本認証を含む。
  9. HTTP プロキシネゴシエーションにおけるカスタム HTTP ヘッダープロキシ サーバーでの認証も含まれます。
  10. すべてのフレームタイプを送信可能(継続、バイナリ、テキスト、クローズ、ピンポン)かどうか。ほとんどの実装では、開発者に断片化されたフレームそして迷惑な ポンフレーム手動で。
  11. リスナーインターフェースさまざまな WebSocket イベントを受信できます。貧弱なインターフェースでは開発者のストレスがたまります。豊富なインターフェースがあれば、開発者は堅牢なアプリケーションを作成できます。
  12. WebSocketの状態を問い合わせ可能か否か。RFC 6455CONNECTING、OPEN、CLOSING、CLOSED 状態が定義されていますが、定義された方法で内部状態遷移を維持する実装はほとんどありません。
  13. ソケット接続のタイムアウト値を設定可能(メソッドの2番目の引数に相当)Socket.connect(SocketAddress endpoint, int timeout)
  14. 基盤となるrawソケットにアクセスできる
  15. 直感的に使いやすいAPIか否か。
  16. 十分に文書化されているか否か。
  17. RFC 7692(WebSocket の圧縮拡張機能)サポート (別名 permessage-deflate)。
  18. リダイレクション(3xx)サポート。
  19. ダイジェスト認証サポート。

nv-websocketクライアント最後の2つを除いて、上記のすべてをカバーしています。さらに、小さいながらも便利な機能の1つは、ping/pongフレームを定期的に送信することです。これは、setPingInterval/setPongIntervalメソッドを呼び出すだけで実現できます(Javaドキュメント)。

免責事項: Takahiko Kawasaki は nv-websocket-client の作者です。

おすすめ記事