发送消息的处理程序。
- public class SendMessage : IHttpHandler
- {
- public void ProcessRequest(HttpContext context)
- {
- var clientID = context.Request.QueryString["clientID"];
- var message = context.Request.QueryString["message"];
- WebAsyncResultCollection.Instance.SendMessage(clientID, message);
- }
- public bool IsReusable
- {
- get
- {
- return true;
- }
- }
- }
可以在任何需要的位置向客户端发送消息。
【不完善】我们需要定时刷新客户端集合,对于长时间未处理的客户端进行超时结束处理。
通过异步处理程序构建的长连接消息推送机制,单台服务器可以轻松支持上万个并发连接。
异步Action
在ASP.NET MVC 4中,添加了对异步Action的支持。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/5/B815529419.png" />
在ASP.NET MVC4中,整个处理过程都是异步的。
在图中可以看到,最右边的ActionDescriptor将决定如何调用我们的Action方法,而如何调用是由具体的Action方法形式决定,ASP.NET MVC会根据不同的方法形式创建不同的ActionDescriptor实例,从而调用不同的处理过程。对于传统的方法,则使用 ReflectedActionDescriptor,他实现Execute方法,调用我们的Action,并在 AsyncControllerActionInvoker包装成同步调用。而异步调用在ASP.NET MVC 4 中有两种模式。
异步Action模式一:AsyncController/XXXAsync/XXXCompleted
我们可以使一个Controller继承自AsyncController,按照约定同时提供两个方法,分别命名为 XXXAsync/XXXCompleted,ASP.NET MVC则会将他们包装成ReflectedAsyncActionDescriptor。
- public class DefaultController : AsyncController
- {
- public void DoAsync()
- {
- //注册一次异步
- AsyncManager.OutstandingOperations.Increment();
- Timer timer = null;
- timer = new Timer(o =>
- {
- //一次异步完成
- AsyncManager.OutstandingOperations.Decrement();
- timer.Dispose();
- },null, 5000, 5000);
- }
- public ActionResult DoCompleted()
- {
- return Content("OK");
- }
- }
由