ASP.NET实现HTTP长轮询(三)——MVC
本文主要描述如何在ASP.NET MVC中实现长轮询:
(1)控制器继承AsyncController:
using System.Threading; using System.Web.SessionState; [SessionState(SessionStateBehavior.Disabled)] public class LongPollingController : AsyncController { public void GetData() { AsyncManager.OutstandingOperations.Increment(); int nowTimes = 0;//当前循环次数(或使用Stopwatch计算时间,超时即退出) int maxTimes = 60;//最大循环次数(或使用Stopwatch计算时间,超时即退出) //计时器,每1秒种触发一次Elapsed事件 Timer timer = new Timer(1000); //订阅计时器的Elapsed事件 timer.Elapsed += (sender, e) => { //判断是否已有新数据或超时,若是则停止计时器并执行如下代码 /*AsyncManager.Parameters["data"] = "Data"; AsyncManager.OutstandingOperations.Decrement();*/ }; //启动计时器 timer.Start(); } //参数data来源于syncManager.Parameters["data"] private ActionResult GetDataCompleted(string data) { //响应 } }
(2)使用jQuery发送请求:
(function getData() { $.post('LongPolling/GetData', {}, function(data) { //接收并处理数据 getData(); }); })();