这篇文章主要为大家详细介绍了.Net MVC实现长轮询的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

什么是长轮询?

长轮询是“服务器推”技术实现方式的一种,可以将服务端发生的变化实时传送到客户端而无须客户端频繁的地刷新、发送请求。

长轮询原理?

客户端向服务器发送Ajax请求,服务器接收到请求后,保持连接不返回消息,直到进行相关处理完毕后才返回响应信息并关闭连接,客户端接收到响应信息后,进行相关处理,处理完毕后再想服务器发送新的请求。

长轮询的应用场景?

长轮询常应用于Web及时通讯、监控、即时报价系统等需要实时将服务端的变化发送到客户端的场景。

长轮询的优缺点?

优点:无消息时不会频繁的向服务器发送请求。

缺点:服务器保持连接比较耗资源

实现:

前台代码:

我们在回调中,再次调用函数,使其在每次请求关闭后,开始下一次请求。


<p id="container"></p><script type="text/javascript">  $(function () {    function longPolling() {      $.getJSON("/DateTime/GetTime", function (json) {        $("#container").append(json.date + "<br/>");        longPolling();      });    };    longPolling();  });</script>

后台代码:

我们后台Controller要使用异步,继承AsyncController基类


public class DateTimeController : AsyncController  {    public void GetTimeAsync()    {      //计时器,5秒种触发一次Elapsed事件          System.Timers.Timer timer = new System.Timers.Timer(5000);      //告诉.NET接下来将进行一个异步操作          AsyncManager.OutstandingOperations.Increment();      //订阅计时器的Elapsed事件        timer.Elapsed += (sender, e) =>      { //保存将要传递给GetTimeCompleted的参数                AsyncManager.Parameters["nowdate"] = e.SignalTime;        //告诉ASP.NET异步操作已完成,进行GetTimeCompleted方法的调用                AsyncManager.OutstandingOperations.Decrement();      };      //启动计时器          timer.Start();    }    public ActionResult GetTimeCompleted(DateTime nowdate)    {      return Json(new { date = nowdate.ToString("HH:mm:ss") + " Welecom " }, JsonRequestBehavior.AllowGet);    }  }

更多相关文章

  1. 在iis上运行的服务器端程序,运行一段时间后,访问都只出现一行乱码,
  2. 分享html元素调用服务器实例
  3. 关于WebSocket部署服务器外网无法连接的解决方案
  4. 简要分析Unity计时器脚本Timer的用法(附代码)
  5. 仪器设备改造技术,实现测量数据上传到服务器的功能
  6. 基于汇编的 C/C++ 协程(用于服务器)的实现
  7. C# 快速手动构建文件服务器
  8. golang 如何部署到服务器?
  9. golang项目如何部署到linux服务器

随机推荐

  1. 如何在详细信息标记的结束事件上添加CSS
  2. javascript实现查看html网页放大图片功能
  3. 原生javascript-图片弹窗交互效果
  4. Javascript学习之匿名函数与自执行详解
  5. 如何使用AngularJS获取url参数
  6. V8是谷歌开源的一个高性能JavaScript引擎
  7. 包含HTML和JavaScript标记的HTML选择控件
  8. 将输入文本字段显示为纯文本
  9. JS计算任意字符串宽度
  10. React-Native:从ListView中的列表项搜索