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住链接
                }
            }
        }

 

posted @ 2016-12-15 15:51  wjl910  阅读(161)  评论(0)    收藏  举报