3

私はそれに慣れていませんが、長いポーリングのアイデアが本当に好きです。
それについて読んだ後、私はそれを次のように実装します:

  1. クライアント要求サーバー (AJAX)
  2. サーバーは変更のために DB をポーリングしています
  3. 変更が認識されたとき、またはタイムアウト サーバーが応答した後

これに関する私の問題は、リクエストごとにサーバー上でスレッドが開始され、すべてのスレッドがDBをポーリングすることです。

すべての着信要求を受け入れるサーバー上で単一のスレッドを実行する方が効果的ではないでしょうか? そのようです:

  1. クライアント要求サーバー (AJAX)
  2. サーバーがリクエストをキューに追加します (応答なし)
  3. Worker-Thread は、キュー内のすべてのリクエストに関連する変更について DB をポーリングします
  4. 変更が認識されると、サーバーは対応するリクエストの結果を返します

これの利点は、DB のポーリングがはるかに少なくなり、すべての要求が 1 つのスレッドで処理される (メモリ消費量が少ない) ことです。

私の質問:
これは可能ですか / そのための実装またはフレームワークはありますか?
(私たちのプロジェクトはジェットを開始していないので、これに PHP を使用するか ASP.NET を使用するかは問題ではありません)

あなたの提案のためのTIA =)

4

2 に答える 2

2

node.jsノンブロッキング IOを確認する

于 2013-10-16T21:36:32.130 に答える
0

新しいスレッドを開始するすべてのリクエストをお手伝いすることはできません.単一のスレッドですべてのリクエストを処理する方法があるかどうか、またはそれが実際的な解決策であるかどうかはわかりません.

データベースのポーリングを担当するスレッドを 1 つ持つことができます。複数のスレッドでまったく同じデータを同時にクエリする必要がないため、これを強くお勧めします。

オブジェクトを使用しApplicationます。IEApplication["ThreadActive"] = true;

if (!Application["ThreadActive"])
ThreadPool.QueueUserWorkItem(new WaitCallback (DBWatcher), objectdata);

DBWatcher メソッドを内部で X 時間ループさせApplication["ThreadActive"]、false にしてからスレッドを終了します。このスレッドの実行中に、取得したデータをCacheオブジェクトに格納します。スレッド (または、管理できる場合は単一のスレッド) は を監視し、Cacheそれに応じてロング ポーリングに応答します。

さらに効率的な解決策を見つけていただければ幸いですが、少なくともこれにより、誰が何を知っているかではなく、データベースとの接続を 1 つだけに制限できます。

于 2013-10-16T22:02:45.970 に答える