成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

AJAX長輪詢之DotNet實現

開發 后端
今天和一個同事聊到了關于Web(傳統)實時通訊的問題,其中包括輪詢、長輪詢、長連接。最后同事說長輪詢對與.net來說比較難以實現(不使用任何框架)。

今天和一個同事聊到了關于Web(傳統)實時通訊的問題,其中包括輪詢、長輪詢、長連接。***同事說長輪詢對與.net來說比較難以實現(不使用任何框架)。

首先看一下什么是“長輪詢”!定義如下:

長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求后hold住連接,直到有新消息才返回響應信息并關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。

優點:在無消息的情況下不會頻繁的請求。

缺點:服務器hold連接會消耗資源。

以上 “長輪詢” 定義是我在網上抄的哦!

那么是不是只要滿足以上所訴的內容長輪詢是不是就成立呢?那就嘗試一下!

建立數據庫:

  1. if not exists(select 1 from  sys.databases where name='beidoudemo')  
  2. begin  
  3. Create Database beidoudemo  
  4. end  
  5. go  
  6.  
  7. use beidoudemo  
  8. go  
  9. if exists(select 1 from sysobjects where name='AjaxPolling' and type='u')  
  10. begin  
  11.   drop table AjaxPolling  
  12. end  
  13. go  
  14. Create table AjaxPolling  
  15. (  
  16.   id int identity Primary key,  
  17.   userName varchar(30) not null,  
  18.   passwordKey varchar(50) not null 

選用Jquery中的AJAX方法發送異步請求,前臺省了很多事情了!

具體代碼請看:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LongPolling.aspx.cs" Inherits="AjaxFinder.LongPolling" %>  
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5. <head runat="server">  
  6.     <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>  
  7.     <title></title>  
  8.     <script type="text/javascript">  
  9.         var userID = 0;  
  10.         function SendXHR() {  
  11.             $.ajax({  
  12.                 type: "post"//AJAX請求類型  
  13.                 url: "LongPollingServer.ashx"//請求url  
  14.                 cache: false,  //無緩存  
  15.                 timeout: 1000 * 80,  //AJAX請求超時時間為60秒  
  16.                 data: { time: 60, userID: userID }, //參數time時間為最多等待(后臺保持)時間(60秒無論是否有數據立即返回),單位為秒。userID判斷詩句是否為新數據的標識  
  17.                 success: function (data, textStatus) {  
  18.                     var obj = document.getElementById("NameDisplay");  
  19.                     //判斷返回成功還是失敗  如果后臺保持連接的時間一到并且沒有新數據就會返回fail開頭失敗的數據  
  20.                     if (data != null && data != "" && !(data.indexOf("fail") != -1)) {  
  21.                         var strarr = data.split(",");  
  22.                        // alert(strarr[0]);  
  23.                         userID = strarr[0];  
  24.                         obj.innerHTML = "親!有新用戶注冊哦!用戶名:" + strarr[1];  
  25.                     }  
  26.                     else {  
  27.                         obj.innerHTML = "親!暫無新用戶注冊哦";  
  28.                     }  
  29.                     SendXHR();//請求后立即發起AJAX請求  
  30.                 },  
  31.                 error: function (XMLHttpRequest, textStatus, errorThrown) {  
  32.                     //New Error do something  
  33.                     if (textStatus == "timeout") {  
  34.                         //超時間  
  35.                         SendXHR();  
  36.                     }  
  37.                 }  
  38.  
  39.             });  
  40.         }  
  41.         window.onload = function () {  
  42.             SendXHR();  
  43.         }  
  44.     </script>  
  45. </head>  
  46. <body>  
  47.     <form id="form1" runat="server">  
  48.     <div>  
  49.     </div>  
  50.         <div id="NameDisplay">  
  51.         </div>  
  52.     </form>  
  53. </body>  
  54. </html> 

前臺數據請求已經準備好了,接下來看一下后臺代碼實現。具體代碼如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Text;  
  6. using System.Net;  
  7. using System.Threading;  
  8. using System.Data;  
  9.  
  10. namespace AjaxFinder  
  11. {  
  12.     /// <summary>  
  13.     /// AJAX長輪詢后臺處理頁面  
  14.     /// 主要用于保持連接  
  15.     /// 有數據返回,無數據繼續保持連接超時返回  
  16.     /// author:bluescreen  
  17.     /// Date  :2013-03-14  
  18.     /// blog:http://www.cnblogs.com/bluescreen/  
  19.     /// 請不要關注代碼編寫規范等一些問題。這僅僅是一個DEMO  
  20.     /// 還存在諸多問題  
  21.     /// </summary>  
  22.     public class LongPollingServer : IHttpHandler  
  23.     {  
  24.  
  25.         public void ProcessRequest(HttpContext context)  
  26.         {  
  27.            /*  
  28.             context.Response.ContentType = "text/plain";  
  29.             context.Response.Write("Hello World");*/ 
  30.             int SendTime = 0;  //最多等待時間  
  31.             int userID = 0;    //上一次的用戶ID  
  32.             if (context.Request.Form["time"] != null&&context.Request.Form["time"].ToString()!="")  
  33.             {  
  34.                 SendTime =int.Parse(context.Request.Form["time"].ToString());//接收傳來的的后臺要保持時間  
  35.             }  
  36.             if (context.Request.Form["userID"] != null && context.Request.Form["userID"].ToString() != "")  
  37.             {  
  38.                 userID = int.Parse(context.Request.Form["userID"].ToString());  
  39.             }  
  40.             int i = 0;//計算超時時間(秒)  
  41.             while (true)  
  42.             {  
  43.                 Thread.Sleep(1000);//停留一千毫秒(1秒)  
  44.                 i++;  
  45.                 if (i < SendTime)  
  46.                 {  
  47.                     if (NameStr(userID) != "")  
  48.                     {  
  49.                         context.Response.Write(NameStr(userID));  
  50.                         break;  
  51.                     }  
  52.                 }  
  53.                 if (i == SendTime)  
  54.                 {  
  55.                     context.Response.Write("fail:無數據");  
  56.                     break;  
  57.                 }  
  58.             }  
  59.         }  
  60.         /// <summary>  
  61.         /// 獲得用戶名  
  62.         /// </summary>  
  63.         /// <param name="userID"></param>  
  64.         /// <returns></returns>  
  65.         private string NameStr(int userID)  
  66.         {  
  67.             string result = string.Empty;  
  68.             string Sqlstr = "select top 1 ID,UserName from AjaxPolling   Order by ID desc";  
  69.             DataSet ds = new DataSet();  
  70.             ds = SQLHelper.Query(Sqlstr, null);  
  71.             if (ds != null)  
  72.             {  
  73.                 if (ds.Tables[0].Rows.Count >= 1)  
  74.                 {  
  75.                     if (int.Parse(ds.Tables[0].Rows[0][0].ToString()) != userID || 0 ==int.Parse(ds.Tables[0].Rows[0][0].ToString()))  
  76.                     {  
  77.                         result = ds.Tables[0].Rows[0][0].ToString() + "," + ds.Tables[0].Rows[0][1].ToString();  
  78.                     }  
  79.                 }  
  80.             }  
  81.  
  82.             return result;  
  83.         }  
  84.         public bool IsReusable  
  85.         {  
  86.             get 
  87.             {  
  88.                 return false;  
  89.             }  
  90.         }  
  91.     }  

以上代碼經過測試的確符合 “長輪詢” 的說法,那是不是可以說是長輪詢呢?各位大牛你們怎么看?

代碼下載:長輪詢AJAX之.net實現

原文鏈接:http://www.cnblogs.com/bluescreen/archive/2013/03/15/2960675.html

責任編輯:林師授 來源: 博客園
相關推薦

2011-05-18 13:28:46

jQueryPHPAJAX

2025-04-14 11:41:12

RocketMQ長輪詢配置

2023-11-28 08:49:01

短輪詢WebSocket長輪詢

2021-12-29 07:44:50

Dotnet 代碼系統

2025-04-27 02:00:00

實時通信Nacos服務端

2024-05-21 10:23:02

反射技術.NET編程語言

2012-08-01 14:16:27

IBMdW

2022-07-14 08:36:28

NacosApollo長輪詢

2022-07-15 19:57:18

Cadence輪詢開源

2024-05-23 11:26:02

2021-07-07 08:01:51

命令行Dotnet Core控制臺

2009-05-20 14:49:16

ibmdwAjaxWeb開發

2012-04-27 10:00:43

jQuery插件

2021-02-26 12:37:39

WebSocketOkHttp連接

2024-05-27 09:52:57

反射技術.NET動態庫

2017-08-21 21:00:33

Java長圖文

2025-02-26 02:00:00

2011-05-24 13:37:16

jQueryAjax

2009-06-26 13:46:13

Struts

2009-06-18 15:23:49

緩存控制器模式Ajax模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区在线发布 | 中文字幕 国产 | 中文字幕人成人 | 91色在线| 蜜月aⅴ免费一区二区三区 99re在线视频 | 神马福利 | 精品在线99 | 91国产精品在线 | 成人在线免费电影 | 国产1页| 蜜桃视频在线观看免费视频网站www | 欧美一区二区三区在线视频 | 亚洲欧美视频一区 | 成人欧美一区二区三区色青冈 | 国产精品久久久久久久久免费丝袜 | 一级黄色裸片 | 欧美日韩成人影院 | 精品在线一区 | 亚洲中字在线 | 精品欧美一区免费观看α√ | 亚洲欧美日本在线 | 国产一区二区高清在线 | 一级欧美 | 一区二区精品在线 | 美国a级毛片免费视频 | 久久伊人在| 亚洲高清视频一区二区 | 91精品国产日韩91久久久久久 | 一本一道久久a久久精品蜜桃 | 亚洲国产高清高潮精品美女 | h视频在线免费 | www.久久艹| 亚洲成人av在线 | 精品久久久网站 | 在线精品国产 | 国产精品久久久久婷婷二区次 | 久久国产精品99久久久大便 | 日本久久精品视频 | 国产人成在线观看 | 91福利网| 国产精品国产 |