6

今の私の目標は、WhatsApp のような機能を備えた Android アプリを作成することです (必ずしも WhatsApp のクローンではありません。類似した、おそらくあまり良くない機能を備えているだけです)。重要なのは、グループ チャット、オンライン/オフライン プレゼンス、オフライン メッセージです。

現在、私は WebSocket サーバーを持つ可能性をほとんど認識しています (無限の可能性を開くことができるリアルタイムソリューションとして紹介されたため)、以前にテストしたことがあります。 . ただし、次の問題に直面しています。

  1. オンライン/オフラインのプレゼンスを管理する方法がわかりません。私はそれを自分で実装する必要がありますか?おそらく Android クライアントは、友人がまだ接続されているかどうかを 30 秒ごとにサーバーに照会しています...
  2. オフライン メッセージはどうですか。特定の人が接続されていない場合、メッセージはその人に配信されません。メッセージをどこかに保存する必要がありますか (MSSQL など)、ユーザーがログインすると、クライアントはサーバーからすべてのオフライン メッセージを自動的に取得しますか?
  3. グループチャットはどうですか?WebSocket がそれをどのように達成できるかわかりませんが、それも個別に実装する必要がありますか? それは、取り組むべきビジネスロジックがたくさんあることを意味します(そして、バグが現れる余地がたくさんあります)...

XMPP と呼ばれるプロトコルがあることは知っていますが (WebSocket とはまったく異なります)、それが私の問題にどのように関係しているかはわかりません。XMPP は私の特効薬ですか (つまり、XMPP のほとんどを実装している.NETライブラリはありますか?)。コメットも聞いたことがありますが、それがどのように関係しているかはまったくわかりません...

不足している部分が非常に多いため、チャット サーバー/クライアントの実装は簡単だと思っていましたが、どうやらそうではないようです。経験のある方は、フィードバックをいただけますか?

4

2 に答える 2

4

プレゼンスおよびインスタント メッセージング機能に WebSocket を使用できますし、使用する必要があります。実際、インスタント メッセージングは​​、WebSocket の世界の "Hello world" の例です。

また、WebSocket 標準は、より高度でリッチなビジネス プロトコルをサポートするように設計されています (皮肉なことに、標準はサブプロトコルを呼び出します)。XMPP はそのようなプロトコルの 1 つであり、探している機能を正確に備えた実装がいくつかあります。

試してみたい場合は、Kaazing (私が勤務している会社) から無料でダウンロードできます。オープン ソース XMPP サーバー (OpenFire) と、事前構成された Kaazing WebSocket ゲートウェイの XMPP エディションが含まれています。Kaazing が行うことは、WebSocket を介して XMPP プロトコルを Web クライアントに拡張することです。これは透過的に行われるため、XMPP サーバーの観点からは、(ブラウザー) クライアントは別の XMPP クライアントにすぎません。

もう 1 つの優れたリソースは、 The Definitive Guide to HTML5 WebSocket (私はその共著者です) の第 4 章で、 Building Instant Messaging and Chat over WebSocket with XMPPというタイトルです。この本には、オープン ソース ソフトウェアが事前にインストールされ、テスト用に構成された、無料でダウンロード可能な VMも付属しています。ここでは、VM の詳細なスクリーンキャストを見て、アイデアを得ることができます。

お役に立てれば。

于 2013-11-14T02:32:09.000 に答える
3

パーツごとに行きましょう:

最初に: ソケットを使用しないでください。つまり、サービスを実行し続け、各クライアント デバイスで常に接続を維持する必要があります。それは狂ったようにバッテリーを消耗させ、誰もそれを使用しません。WhatsApp、ハングアウト、Gmail、Facebook メッセンジャーなど、これらのアプリのすべてが使用しているのは、Google クラウド メッセージング (GCM) http://developer.android.com/google/gcm/index.htmlサービスです。

  1. ステータスの変更が発生した瞬間に GCM 経由で送信したい場合や、ユーザーがフレンド リスト画面に入ると、ステータスで 1 回限りのクエリを実行する場合があります。ここで重要なことは、30 秒ごとにクエリを実行しないことです。モバイルデバイスで。

  2. はい、デバイスが接続されていない場合は、サーバーが処理を行う必要があります。また、皆さんが SQL を使用するとは思えません。現在多くの企業が行っているのは、スケーラビリティを理由に noSQL アプローチですが、それは私の専門知識ではありません。

  3. ここで何を尋ねているのかわかりません。データを送信する方法と、アプリケーションがデータを処理する方法を混在させています。これらは 2 つの完全に別のものです。違いを学んでください。たとえば、誰かが UDP 経由で Wi​​Fi-Direct 経由で動作するグループ チャットを作成できますが (これがデータの送信方法です)、このデータをどう処理するかは問題ではありません。パーサー/インタープリター。それは単なるデータです。

幸運を。

于 2013-11-13T09:39:48.053 に答える