利用Jquery實現http長連接(LongPoll)


參考: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)
                {
                    
                }

            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM