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();
});
})();
浙公网安备 33010602011771号