更新のために 3 秒ごとに ajax を介してポーリングするブラウザーを含むアーキテクチャがあり、それをlong-pollingに変更したいと思います。
1, 2.. {n} 個のクライアントがロング ポーリングを行い、更新を待機し、待機しているクライアントに戻るように通知するためにサーバーで何かが発生するようにしたいと考えています。最初に考えたのは を使用することでしたEventWaitHandle。1 つのクライアントをサポートするだけであれば、これは簡単に実行できます。クライアントをブロックするだけで、おそらくタイムアウトで、そうではないかもしれません。いずれにせよ、サポートできるのは 1 つのクライアントのみであり (待機中のスレッドは 1 つしか起動しないため)、n 個のクライアントが必要です。AutoResetEvent WaitHandleWaitOneAutoResetEvent
を使用する必要があると確信していますが、それをいつ呼び出すかはわかりません(スレッドを起動するとき)。と の間の任意の量だけを使用する必要がありますか?ManualResetEvent WaitHandleResetSetThread.SleepSetReset
疑似コードでは、ウェイク ロジックは次のようになります。
- 得る
ManualResetEventWaitHandle - 電話
Set - 新しいリクエストが吹き飛ばされるのを防ぎながら、待機中のすべてのクライアントが目覚めたことを確認します
Reset待機中のすべてのクライアントが更新を受信したので、今すぐ呼び出します
私が苦労しているのはその3行目です。現在LastTxID、クライアント/サーバーが維持し、潜在的に2つの待機ハンドルを使用するという考えを投げかけています。ただし、この実装に夢中になる前に、ここでフィードバックを取得して、ウェイク ロジックがどのように実装されるかを確認したかったのです。
編集:IISを微調整するか、WCFまたはその他のソリューションを介してホスティングすることにより、最大同時ユーザー数を把握することに関連する問題があると仮定します。ウェイクアップ ロジックだけに注目したいと思います。