2009-05-31 9 views
2

これは好奇心をそそり、 "将来の参考になる"ものですが、データベース側ではどのように実装されていますか?ほとんどの実装では、データが利用できるようになるまで長時間待機するHTTPリクエストを使用することがわかりますが、これはサーバー側でどのように行われますか? Webサーバーは、新しいデータがいつ利用できるかをどのように知っていますか?それは絶えずデータベースをポーリングしますか?データベース側の彗星を実装する

答えて

1

あなたはどのDBを使用していますか?多くのRDBMSが何らかの形または形式で行うトリガーをサポートしている場合、実際にHTTP要求に適切な応答を送信するように通知するイベントを起動させることができます。

トリガーがポーリングする必要性を排除します...ポーリングは一般的には最適ではありません。

PostgreSQLはかなり良いサポート(PL/Pythonでさえ)を持っているようです。

1

これはアプリケーションによって大きく異なります。最も可能性の高い実装は、ある種のメッセージングシステムです。

ほとんどの場合、かなりの数の部品で構成されます、サーバー側のコード:開いているすべての接続を扱って

  • 着信要求をhansleいくつかのアプリケーションサーバ、
  • (別の)彗星のサーバー上のクライアントに、メッセージングインフラストラクチャの
  • データベース、および
  • 何らかの

最後eでは、メッセージングインフラストラクチャが本当に重要です。これにより、アプリサーバーがコメットサーバーと通信する方法が提供されます。したがって、アプリケーションサーバーにリクエストが入ると、メッセージキューにメッセージを書き込んで、彗星サーバーに正しいクライアントに通知するように指示します。

メッセージングの実装方法は、アプリケーションに非常に大きく依存します。非常に簡単な実装では、messagesという名前のデータベーステーブルを使用し、それをポーリングします。

しかし、使用する予定のスタックによっては、もっと洗練されたツールが利用できるはずです。

私はを使っていますが、単にネットワークポートで待ち受けます。送信するデータがある場合はいつでも、Railsアプリケーションサーバーはこのジャガーノートプッシュサーバーへの接続を開き、クライアントに何を送信するかを指示します。

+0

私の質問に直接答えることはできませんでしたが、説明(また、私はRubyを使用しているため、Juggernautへのリンクもあります)に+1しました。 –