基於 AJAX和Webservice 的長輪詢(long-polling)方式ServerPush技術試驗

 

基於 AJAX和Webservice 的長輪詢(long-polling)方式ServerPush

開始是想試着做基於單純的AJAX的ServerPush,可試了很多次,同一段代碼程序時好時壞,壞時壞較多,達不到目的。而我對AJAX也是太菜了最終也沒找到原因,希望以後能知道其真正原因。考慮是不是SOAP起到了作用,有待考證。

後來換了想法用webService可以達到目的。具體思路其實就是模擬一個ServerPush,只爲了說明這種方法可以實現所一代碼是儘量的簡單. 入口是Browser的一次調用Webservice開始。沒有實時數據只在Server端將程序阻塞一定時間在發送,實際中這了是可以等待一個實時數據的產生。代碼很簡單,不過程序是AJAX Enabled WebSite 又因爲用到了Microsoft.Web.Preview.dll所以需要同時安裝ASPAJAXExtSetup.msi、ASPAJAXCTP.msi,可以在www.ajax.asp.net找到相應下載頁面。

   代碼中sleep的時間是2秒,最長測試過20分鐘這種http的長連接沒有斷。

 

    Webservice 很簡單就是sleep後return服務器時間:

 

  1.     [WebMethod]
  2.     public string GetHelloWorldString(string name)
  3.     {
  4.         System.Threading.Thread.Sleep(1000*2);
  5.         return string.Format("Welcome to ASP.NET AJAX world, {0}!. Now it is {1}.", name, DateTime.Now);
  6.     }

Web前臺也很簡單,不過如果沒使用過asp.net ajax需要產看一些資料,不過就是看代碼也能明白調用過程,只不過ajax的使用是在asp.net ajax的加載的JavaScript文件裏:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxHttp.aspx.cs" Inherits="AjaxHttp" %>


  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>http sever push 試驗</title>
  6.         <script type="text/javascript">
  7.         var g_tbName = null;
  8.         var g_btnSayHello = null;
  9.         var g_lbMessage = null;
  10.         
  11.         function pageLoad()
  12.         {
  13.             g_tbName = new Sys.Preview.UI.TextBox($get('tbName'));
  14.             g_tbName.initialize();
  15.             
  16.             g_btnSayHello = new Sys.Preview.UI.Button($get('btnSayHello'));
  17.             g_btnSayHello.initialize();
  18.             
  19.             g_lbMessage = new Sys.Preview.UI.Label($get('lbMessage'));
  20.             g_lbMessage.initialize();
  21.         }
  22.         
  23.         function getServerHelloString()
  24.         {
  25.             WebService.GetHelloWorldString(g_tbName.get_text(), cb_getServerHelloString);
  26.         }
  27.         
  28.         function cb_getServerHelloString(result)
  29.         {
  30.             g_lbMessage.set_text(result);
  31.             getServerHelloString();
  32.         }
  33.     </script>
  34. </head>
  35. <body>
  36.     <form id="form1" runat="server">  
  37.         <asp:ScriptManager ID="ScriptManager1" runat="server">
  38.             <Services>
  39.                 <asp:ServiceReference InlineScript="True" Path="WebService.asmx" />
  40.             </Services>
  41.             <Scripts>
  42.                 <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js" />
  43.             </Scripts>
  44.         </asp:ScriptManager>
  45.     <div>
  46.          <label for="tbName">Your Name:</label><input id="tbName" type="text" />
  47.         <input id="btnSayHello" type="button" value="提交" onclick ="getServerHelloString();" />
  48.         <div id="lbMessage">
  49.         </div>
  50.         </div>
  51.     </form>
  52. </body>
  53. </html>

輸入字符,提交可以看到同步了服務器時間,頁面不是這個提交。

由於項目的原因可能最近不能更多的去研究這個了,不過感覺ServerPush是支潛力股,以後一定深入學習,希望高人指點。

 

源代碼已經上傳。http://download.csdn.net/download/jjjjj102310253/908563

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章