国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET中ServerPush用法實例分析

2024-07-10 12:47:55
字體:
來源:轉載
供稿:網友

本文實例講述了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>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双城市| 松江区| 独山县| 临夏市| 望奎县| 海原县| 富裕县| 枣庄市| 浪卡子县| 原平市| 建阳市| 微博| 寻乌县| 博爱县| 海阳市| 曲阳县| 龙井市| 宝鸡市| 鹤山市| 鹤岗市| 綦江县| 呼和浩特市| 镇赉县| 海伦市| 项城市| 北辰区| 大埔县| 岐山县| 甘泉县| 阳江市| 柳江县| 安宁市| 上高县| 河东区| 彭阳县| 德庆县| 天柱县| 澎湖县| 呼玛县| 呼玛县| 抚宁县|