现在的位置: 首页 > 综合 > 正文

基于 AJAX和Webservice 的长轮询(long-polling)方式ServerPush技术试验

2018年04月09日 ⁄ 综合 ⁄ 共 2780字 ⁄ 字号 评论关闭

 

基于 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是支潜力股,以后一定深入学习,希望高人指点。

 

源代码已经上传。

抱歉!评论已关闭.