码迷,mamicode.com
首页 > Web开发 > 详细

利用Jquery实现http长连接(LongPoll)

时间:2017-01-08 20:07:50      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:namespace   c#   lis   运行   lin   prot   connected   gpo   pac   

参考:http://www.cnblogs.com/vagerent/archive/2010/02/05/1664450.html

PS:为了满足 某些需要 实时请求的业务(PS:例如聊天室),我们可以通过多种技术实现, 其中建议大家使用长链接(PS:减少带宽)或者服务器主动推送技术(例如:Signalr)。

这里只对长链接进行陈述,参考上面的博客写了个Demo如下(复制到项目里面可以直接运行): 

新建一个 Default.aspx 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LongPool.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body> 
   
    <input type="button" id="Button1" value="AjaxLongPoll" />
    <label id="ajaxMessage"></label>  
</body>
</html>
<script src="Scripts/jquery-1.8.2.js"></script>
 <script>
     $(function () {
         $("#Button1").bind("click", { btn: $("#Button1") }, function (evdata) {
          
             $.ajax({
                 type: "POST",
                 url: "Default.aspx",                         
                 data: { ajax: "1", time: "6000000" },
                 success: function (data, textStatus) {
                     var _rec = $.parseJSON(data);
                     //成功
                     if (_rec.success == "1") {
                         //客户端处理  
                         alert("ok");
                         ///重新请求                           
                         evdata.data.btn.click();
                     }
                     //超时  
                     if (_rec.success == "0") {
                         evdata.data.btn.click();
                     }
                 },
                 complete: function (XMLHttpRequest, textStatus) {
                     if (XMLHttpRequest.readyState == "4") {
                         //alert(XMLHttpRequest.responseText);
                     }
                 },
                 error: function (XMLHttpRequest, textStatus, errorThrown) {
                     //$("#ajaxMessage").text($(this).text()+" out!")                      

                     alert(textStatus);
                         evdata.data.btn.click();
                 }
             });
         });
     })
 </script>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace LongPool
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Form["ajax"]=="1")
            {
                int time = Convert.ToInt32(Request.Form["time"]);
                DateTime date1 = DateTime.Now.AddMilliseconds(time);
                bool ready = false;
                int n = 0;
                while (Response.IsClientConnected)
                {
                    Thread.Sleep(3000);
                    if (DateTime.Compare(date1,DateTime.Now)<0)
                    {
                        Response.Write("{\"success\":0}");
                        Response.End();
                        break;  
                    }
                    //此处进行请求处理,有结果了置ready = true  
                    ready = true;
                    if (ready)
                    {
                        Response.Write("{\"success\":1}");
                        Response.End();
                        break;  
                    }
                }
            }
            else
            {
                if (!IsPostBack)
                {
                    
                }

            }
        }
    }
}

 

利用Jquery实现http长连接(LongPoll)

标签:namespace   c#   lis   运行   lin   prot   connected   gpo   pac   

原文地址:http://www.cnblogs.com/shuai7boy/p/6262542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!