http长连接
1、前台
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title></title> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script type="text/javascript"> $(function () { var $info = $("#info"); (function longPolling() { $.ajax({ url: "/api/Report?name=wjl", data: { "date": (new Date()).getTime() }, dataType: "json", timeout: 5000, success: function (data, textStatus) { $info.append("[state]:" + textStatus + ",name:" + data.dataList.Name + ",Num:" + data.dataList.Num + "<br/>"); if (textStatus == "success") { longPolling(); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { $info.append("[state]:" + textStatus + ",error:" + errorThrown + "<br/>"); if (textStatus == "timeout") { longPolling(); } else { longPolling(); } } }) })(); }) </script> </head> <body> <div id="info"> </div> </body> </html>
ajax的方式完成长连接,优点:和服务器始终保持一个连接,如果当前连接请求成功后,将更新数据并且继续创建一个新的连接和服务器保持联系。如果连接超时或者发生异常,这个时候程序也会创建一个新连接继续请求。这样就大大节省了服务器和网络资源,提高程序性能,也保证程序的顺序
2、api后台
ReturnMessage msg = new ReturnMessage { Result = 1, Message = "请检查参数是否正确", dataList = null };
public ReturnMessage GetInformation(string name) { Random rand = new Random(); while (true) { Thread.Sleep(300);//休眠,模拟处理业务等 int i = rand.Next(1,100); if (i > 20 && i < 30) { msg.dataList = new {Name=name,Num=i}; return msg; } else { Thread.Sleep(1000);//如果没有数据变化,就休眠hold住链接 } } }

浙公网安备 33010602011771号