婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ASP.NET中ServerPush用法實例分析

ASP.NET中ServerPush用法實例分析

熱門標簽:關于宗地圖標注技術規范 威海電銷 400免費電話怎么辦理 t3出行地圖標注怎么做 河南語音外呼系統公司 400電話辦理最優質 外呼電銷機器人軟件 寧夏機器人電銷 河北網絡回撥外呼系統

本文實例講述了ASP.NET中ServerPush用法。分享給大家供大家參考。具體分析如下:

什么是ServerPush,服務器向客戶端“推送“,其實就是”長連接“

只有瀏覽器請求服務器端,服務器端才給瀏覽器響應數據,不會主動向瀏覽器推送數據,這是一種安全考慮,也是提高服務器的性能考慮,如果服務器向瀏覽器主動推送數據,就要用到ServerPush等技術模擬實現。

舉個例子:

通過兩個頁面互相發送消息實現,消息放到數據庫。

/// summary>
/// ServerPush1 的摘要說明
/// /summary>
public class ServerPush1 : IHttpHandler
{
  public void ProcessRequest(HttpContext context)
  {
   context.Response.ContentType = "application/json";
   string action = context.Request["action"];
   if (action == "send")//發送
   {
    string me = context.Request["me"];
    string toUserName = context.Request["toUserName"];
    string msg = context.Request["msg"];
    SQLHpler.ExecuteNonQuery("INSERT INTO T_Msgs(FromUserName,ToUserName,Msg) VALUES(@FromUserName,@ToUserName,@Msg)", new SqlParameter("@FromUserName", me),
     new SqlParameter("@ToUserName", toUserName),
     new SqlParameter("@Msg", msg));
    context.Response.Write(new JavaScriptSerializer().Serialize(new { Status = "ok" }));
   }
   else if (action == "receive")
   //登陸,并持續查詢、接收對方發過來的數據
   {
    //做一個簡單的例子,以ServerPush1.ashx?me=sean
    //請把發給sean的消息發給我一條
    string me = context.Request["me"];
    while (true)
    {
     DataTable dt = SQLHpler.ExecuteQuery("SELECT TOP 1 * FROM T_Msgs WHERE ToUserName=@ToUserName",new SqlParameter("@ToUserName", me));
     if (dt.Rows.Count = 0)
     {
      Thread.Sleep(500);//沒找到,休息500ms再查詢,這樣避免對數據庫的查詢壓力,和占用WEB服務器CPU資源
      continue;//下一次while
     }
     else
     {
      DataRow row = dt.Rows[0];
      long id = (long)row["Id"];
      string fromUserName = (string)row["FromUserName"];
      string msg = (string)row["Msg"];
      //查詢完之后要刪除消息,否則會出現死循環,不停的給頁面輸出同一個消息
      SQLHpler.ExecuteNonQuery("DELETE FROM T_Msgs WHERE Id=@Id",new SqlParameter("@Id",id));
      //創建一個匿名對象,將查詢到的數據存到里面
      var data = new { FromUserName = fromUserName, Msg = msg, Id = id };
      string json = new JavaScriptSerializer().Serialize(data);//將匿名對象轉換為json
      context.Response.Write(json);//將請求結果以json格式返回
      break;
     }
    }
   }
   else
   {
    throw new Exception("action錯誤");
   }
}

!DOCTYPE html>
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
title>/title>
script type="text/javascript" src="jquery-1.8.3.min.js">/script>
script type="text/javascript">
var rev = function () {
 var mine = $('#me').val();
 $.ajax({
  type: 'post', url: 'serverPush1.ashx',
  data: { action: 'receive', me: mine },//傳給serverPush.ashx根據me查找發給me的消息
  success: function (data) {
   $('#ulMsg').append($('li>' + data.FromUserName + '對我說:' + data.Msg + '/li>'));
   rev();//收到消息后再向服務器請求數據,再給我一條消息
  },
  error: function () {
   rev();
   //哪怕網絡請求失敗(比如用戶網絡故障),也再次發送請求
  }
 });
};
$(function () {
 //發送
 $('#btnSend').click(function () {
  var myName = $('#me').val();
  var toUserName = $('#toUserName').val();
  var msg = $('#msgContext').val();
  $.ajax({
   type: 'post', url: 'serverPush1.ashx',
   data: { action: 'send', me: myName, toUserName: toUserName, msg: msg },//根據用戶輸入的信息,傳到服務端ServerPush.ashx進行插入操作
   success: function (data) {
    if (data.Status == 'ok') {//如果發送成功,
     $('#ulMsg').append($('li>我對' + toUserName + '說:' + msg + '/li>'));
     $('#msgContext').val('');
    }
    else {
     alert('發送出錯,返回報文無法識別');
    }
   },
   error: function () {
    alert('發送出錯');
   }
  });
 });
 //登陸,接收數據
 $('#btnLogin').click(function () {
  rev();
  $(this).attr("disabled", "disabled");
 });
 /*
 $('#btnLogin').click(function () {//接收
  var mine = $('#me').val();
  $.ajax({
   type: 'post', url: 'serverPush1.ashx',
   data: { action: 'receive', me: mine },
   //傳給serverPush.ashx根據me查找發給me的消息
   success: function (data) {
    $('#ulMsg').append($('li>' + data.toUserName + '對我說:' + data.msg + '/li>'));
   },
   error: function () {
    alert('接收失敗');
   }
  });
 });*/
});
/script>
/head>
body>
 發送人:input type="text" id="me" />input type="button" id="btnLogin" value="登陸" style=""/>br />
 接收人:input type="text" id="toUserName" />br />
 輸入消息:input type="text" id="msgContext" />input type="button" id="btnSend" value="發送" />br />
 聊天記錄:br />
 ul id="ulMsg">
 /ul>
/body>
/html>

希望本文所述對大家的asp.net程序設計有所幫助。

您可能感興趣的文章:
  • Asp.net的服務器推技術 (Server Push)
  • ASP.NET中Global和URLReWrite用法
  • ASP.NET中Application全局對象用法實例淺析
  • ASP.NET中母版頁和shtml實例入門
  • ASP.NET檢測到不安全 Request.Form 值解決方案匯總
  • asp.net開發微信公眾平臺之驗證消息的真實性

標簽:賀州 樂山 池州 廣元 吉林 淮北 固原 咸寧

巨人網絡通訊聲明:本文標題《ASP.NET中ServerPush用法實例分析》,本文關鍵詞  ASP.NET,中,ServerPush,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET中ServerPush用法實例分析》相關的同類信息!
  • 本頁收集關于ASP.NET中ServerPush用法實例分析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 襄垣县| 湖州市| 扎兰屯市| 家居| 科技| 华蓥市| 潼关县| 叙永县| 保德县| 海兴县| 界首市| 乌兰浩特市| 封丘县| 罗江县| 南汇区| 大同县| 子洲县| 张掖市| 繁峙县| 吴桥县| 岚皋县| 朝阳区| 九龙城区| 原平市| 马公市| 普格县| 分宜县| 泰来县| 观塘区| 青州市| 句容市| 宁强县| 新干县| 定西市| 屏东县| 岑溪市| 惠来县| 抚州市| 内丘县| 荔波县| 利辛县|