iOS/Android アプリ通信用の TCP ベースの RPC サーバー (Erlang または類似のもの) 質問する

iOS/Android アプリ通信用の TCP ベースの RPC サーバー (Erlang または類似のもの) 質問する

私は iOS と Android の両方でネイティブ モバイル アプリケーションを構築しています。これらのアプリケーションは、他のネットワーク ベースのアプリケーション (Facebook、Twitter、Words with Friends などのソーシャル ゲームなど) と同様に、サーバーとの間で「リアルタイム」の更新を必要とします。

これに HTTP ロング ポーリングを使用するのは、特に TCP セットアップ/ティアダウンが多い場合は、バッテリー寿命に悪影響を与える可能性があるという意味で、やりすぎだと思います。モバイル アプリケーションで永続的な TCP ソケットを使用してサーバーへの接続を確立し、すべての Web サービス通信で RPC スタイルのコマンドをサーバーに送信するのは理にかなっているかもしれません。もちろん、これには、サーバーが長時間の TCP 接続を処理し、TCP パイプに渡されたデータを理解したら Web サービスと通信できることが必要です。JSON または XML を使用してプレーン テキストでデータを渡すことを考えています。

おそらく、Erlang ベースの RPC サーバーは、このようなネットワーク ベースのアプリケーションに適しています。モバイル アプリは、iOS の NSURLConnection などを使用して個々の HTTP 要求が行う複数のセットアップ/ティアダウンなしで、1 つの接続でサーバーからデータを送受信できます。Web ブラウザーが関係しないため、モバイル クライアント レベルで HTTP のニュアンスを処理する必要はありません。これらの "COMET" およびロング ポーリング/ストリーミング サーバーの多くは、HTTP を念頭に置いて構築されています。TCP でプレーン テキスト プロトコルを使用するだけで十分であり、クライアントの応答性が向上し、サーバーからの更新の受信が可能になり、従来のロング ポーリングおよびストリーミング モデルよりもバッテリー寿命が長くなると思います。

現在、ネイティブの iOS または Android アプリでこれを実行している人はいますか? 独自のサーバーを作成しましたか? それとも、車輪の再発明をせずに今日から作業を開始できるオープンソースの何かがありますか? TCP ベースの RPC サービスのみを使用することが、HTTP を使用するよりも悪い決定である理由は何かありますか?

HTTP パイプラインも調べてみましたが、クライアントに実装するとなると面倒な作業になりそうにありません。また、クライアント <-> サーバー通信チャネルで双方向通信が可能になるかどうかもわかりません。

ご意見をいただければ幸いです。

ベストアンサー1

独自のプロトコルをロールダウンしたTCPソケットを使用する方が、特にモバイルデバイスのリソースの性質上、HTTPよりもかなり優れています。Erlangはかなりうまく機能しますが、プロトコルから始めましょう。Erlangは特にビット構文式。ただし、必要に応じてプレーンテキストを使用することもできます。JSON(パーサーが必要です:モチソン2.erl見つかったMochiweb ライブラリ) および XML (パーサーが必要になります:エルソム)。

私は個人的に、Erlang サーバーとモバイル デバイスで生の TCP ソケットを使用するプロジェクトに携わったことがあります。ただし、選択したポート番号によっては、途中のルーターがサービス プロバイダーのセキュリティ ポリシーに応じてパケットをブロック/ドロップします。ただし、HTTP は機能すると思います。人々は Facebook モバイルでチャットしたり、デバイスからツイートを送信したりしますが、これらのソーシャル エンジンは HTTP を使用するロング ポーリングやサーバー プッシュなどの何らかの方法を使用していることは間違いありません。モバイル デバイスの機能は最近進歩しています。

独自のTCPベースのプロトコルを構築するには、ポートの選択、クライアントとサーバーの両方でのデータの解析、セキュリティの問題など、多くの課題があります。HTTPを使用すると、クライアントまたはサーバーのプロトコルの問題の修正に時間を費やすのではなく、実際の問題を検討できます。AndroidやIOS(iPad、iPhoneなど)などの上記のデバイスは、HTTP COMET(ロングポーリング)を処理できます。モバイルデバイス上のWebアプリケーションの標準これらも同様W3C モバイル Web ベスト プラクティス、アプリは HTTP を使用して正常に機能します。

HTTPメソッドを使用すると作業が迅速化され、これらのデバイスのSDKには、独自のTCPベースのプレーンテキストプロトコルを展開する場合と比較して、必要なソリューションのプロトタイプを作成するのに役立つライブラリがたくさんあります。この理由を裏付けるために、次のものを調べてください。W3Cの調査結果

最後に、これらのデバイスにおけるHTTPの利点についてお話しします。モバイルデバイスでWebテクノロジーを使用する場合、Opera ウィジェット電話ギャップ煎茶タッチ、 そしてJQueryモバイル、それらのSDKとライブラリには、すでに最適化が施されているか、アプリを効率的にするための方法が十分に文書化されています。さらに、これらのテクノロジーには、バッテリーチェック、SMS、MMS、GSMブロードキャストチャンネル、連絡先、照明、GPS、メモリなどのネイティブデバイスのリソースにアクセスするためのAPIがあり、すべてJavaScriptクラスのAPIとして提供されています。ネイティブプログラミング言語を使用すると、J2MEモバイル Pythonまたはシンビアン C++ / Qt上記のCSS3、HTML5、JavaScriptツールなどのWebテクノロジーを使用する場合と比較して、上記のWebツールを使用すると、アプリを簡単に配布できるようになります。オヴィストアまたはアップルストア経験から。

HTTP を使用すると、テストが簡単になります。必要なのはパブリック ドメインだけです。これにより、モバイル デバイスのウィジェットがインターネット経由でサーバーを見つけます。独自の TCP/IP プロトコルを使用する場合、ポート 80 または別のよく知られているポートを使用する予定がない限り、ネットワーク ルーターが使用するポート番号に悪影響を与える可能性があります。ただし、その場合でも、サーバー IP はパブリックにする必要があります。これにはショートカットがあります。TCP サーバーをテストするモバイルのインターネット接続と同じ ISP の背後に配置すると、ISP ルーターは送信元と送信先の両方をそのネットワークの背後にあるものとして認識します。しかし、全体として、独自のプロトコルを展開するには課題があります。

編集: HTTPを使用すると、次のようなメリットがあります休む. Erlangで実装されたWebサーバー(特にヤーズそしてモチウェブ) は REST サービスに優れています。この記事をご覧ください。YawsによるRESTFULサービスmochiweb には、次のような興味深い記事があります。Mochiweb を使用した 100 万ユーザー コメット アプリケーションこれは3つの部分に分かれています。さらに、この質問に対する解決策

おすすめ記事