• .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);
            }
        }
  • 相关阅读:
    【亲测有效】安装npm慢的解决方案
    设置redis开机自动启动
    win10开启redis失败解决方案
    ajax跨域问题
    python进程不能并行的原因,进程阻塞
    python多进程并行代码
    python多进程间通信
    orangepi自启动打开一个终端并且运行脚本
    lxterminal命令打开新窗口并执行python脚本
    orangepi获取cpu温度
  • 原文地址:https://www.cnblogs.com/xuxiaoshuan/p/7001714.html
Copyright © 2020-2023  润新知