zoukankan      html  css  js  c++  java
  • .Net MVC 实现长轮询

    什么是长轮询?

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

    长轮询原理?

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

    长轮询的应用场景?

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

    长轮询的优缺点?

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

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

    实现:

    前台代码:

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

    <div id="container"></div>
    <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);
            }
        }
  • 相关阅读:
    DevExpress v17.2新版亮点——CodeRush篇(三)
    DevExpress v17.2新版亮点——CodeRush篇(二)
    DevExpress v17.2新版亮点——CodeRush篇(一)
    MySQL性能优化
    什么是MongoDB?
    Redis的两种持久化方式对比
    Redis
    十六、Node.js-fs模块-流
    js中const,var,let区别
    十五、Node.js-fs模块(中)
  • 原文地址:https://www.cnblogs.com/xuxiaoshuan/p/7001714.html
Copyright © 2011-2022 走看看