2

簡単な説明:

さて、私は何日もこの質問に対する答えを探していましたが、「プッシュ通知サーバーの作成方法」などの質問に対する答えがあるようです。私は node.js を使用していますが、sock.js を使用してプッシュ通知サーバーを「作成」するのは非常に簡単です (sock.js に比べて socket.io は良くないと聞きました)。ここまでは問題ありません。しかし、私が欲しいのは、そのようなサーバーをモデル化する方法です。

詳細

では、チャット サービスがあるアプリケーションがあるとしましょう (これはほんの一例です。ご想像のとおり、実際のものは大きいです)。ある人がルームでメッセージを送信すると、ルーム内のすべての人が通知を受け取ります。しかし、私が望むのは「ステートフル」なチャットです。つまり、メッセージをデータ ストアに保存したいと考えています。ここで問題が発生します。メッセージをデータベースに保存し、後で「ねえ、あなたへのメッセージがあります」と全員に伝えます。アプリの一部だけにリアルタイム アクティビティが必要な場合、これは簡単に思えます。アプリ全体がリアルタイム通信に基づいている場合はどうすればよいですか? これに加えて、RESTful api も必要です。

私の解決策(私は本当に満足していません)

私がやろうと思ったのはこれでした:(もちろんサーバー側で)

                 Data Store
                     ||
                 Data Layer (which talks to data store)
                     ||
            ------------------
            |                |
     Real-Time Server   Restful server

ここで、リアルタイム サーバーは、データ層が発行する興味深いイベントをリッスンします。何か興味深いことが起こると、サーバーはクライアントに通知します。しかし、どのクライアントですか?- これは私の方法の問題です

お役に立てれば幸いです。:)

更新

質問の重要な部分を強調するのを忘れていたと思います。pub-sub システムを実装する方法は? (注:実際のコードは必要ありません。自分で管理します。それを行う方法だけが助けが必要なところです)。問題は、コードを書くときにかなり困惑することです-何をどのように行うか(私の混乱は、この質問自体から明らかです)。このことを始める方法について、参考文献やアドバイスを教えてください。

4

1 に答える 1

10

あなたのことを正しく理解できたかどうかはわかりません。しかし、私はそれをどのように読んだかを要約します:

  1. ソケット接続を使用して、接続されているすべてのクライアントに新しいメッセージを公開するリアルタイム チャット サーバーがあります。
  2. チャットログを保持したいデータベースがあります。
  3. また、リアルタイム サーバーにアクセスして現在のチャットを遅延した方法で取得するための安らかなインターフェイスもあります。

そして、次のようにシステムを構築したいと考えています。

システムの現在のアーキテクチャ

上の図で、紫色の曲線で囲んだコンポーネントは、他のすべてのクライアントと同様に更新する必要があります。私は正しいですか?「データレイヤー」の意味はわかりませんが、データベースに書き込み、他のコンポーネントとデータベースをインターフェースするデーモンだと思いました。

このアーキテクチャでは、意図した方向にすべて問題ありません。つまり、DataStore はサーバーによって接続され、データにアクセスしたり、認証のためにクライアントの資格情報を照会したり、ユーザー設定を読み取ったりする可能性があります。

これらのコンポーネントに対する他の期待として、接続されたクライアントのようにこれらのコンポーネントを更新できるようにするつもりです。

バックエンド コンポーネントのリアルタイム サーバーへの接続の推奨設計。

リアルタイム サーバーはクライアントのサーバーです。しかし、より一般的な命名を好む場合は、データ層またはデータベース サーバーのクライアントでもあります。したがって、サーバーがクライアントになることを妨げるものは何もないことはすでにわかっています。では、なぜ私たちのデータベースシステムと安静システムもクライアントになれないのでしょうか? ブラウザや他のクライアントを接続するのと同じ方法で、それらをリアルタイム サーバーに接続します。彼らが人々の一人であることを楽しんでもらいましょう。:)

すべてが完全に間違っていることを理解していなかったことを願っています。これは質問にとって理にかなっています。

于 2012-07-01T15:09:56.183 に答える