AsyncControllerを配線して、注文ページで注文を保存するとユーザーが同じ注文を表示しているすべてのユーザーに、注文が変更されたという通知が表示されるようにします。 。これを実装する私のアプローチは、注文ページで長いポーリングAjaxリクエストを行うことですが、これに対処するスケーラブルなAsyncControllerを作成する方法は私には分かりません。MVC 3でロングポーリングを正しく行う方法
これは私が今までに持っているものです。IDは、変更または変更のためにポーリングされたとして通知される注文のIDです。
public class MessageController : AsyncController
{
static readonly ConcurrentDictionary<int, AutoResetEvent> Events = new ConcurrentDictionary<int, AutoResetEvent>();
public ActionResult Signal(int id)
{
AutoResetEvent @event;
if (Events.TryGetValue(id, out @event))
@event.Set();
return Content("Signal");
}
public void WaitAsync(int id)
{
Events.TryAdd(id, new AutoResetEvent(false));
// TODO: This "works", but I should probably not block this thread.
Events[id].WaitOne();
}
public ActionResult WaitCompleted()
{
return Content("WaitCompleted");
}
}
私はHow to do long-polling AJAX requests in ASP.NET MVC?を見ました。私はこのコードに関するすべての詳細を理解しようとしていますが、このコードを理解する限り、スレッドプール内の各ワーカースレッドをブロックしています。
だから、私はこれをすばらしいスケーラブルな方法で実装する必要がありますか?それ以上の第三者コンポーネントを使用することは望ましくないことに注意してください。このシナリオを適切に実装する方法をよく理解したいと思います。