關於.NET中的Server push技術
今天突發奇想,想研究一下服務端內容有變化,如何引起客戶端的改變。
一般來說方法有2種,一種就是客戶端用JS非同步定時輪詢伺服器端,這種是大部分人採用的方法,但是我在想到底可以不可以實現伺服器端有改變時才會主動推送到客戶端呢?按理來說這種方式對於B/S是不可能實現的,因為B/S是無連線的,這種request/response的方式無法保持狀態。搜了一下,看到部落格園有位朋友寫了篇文章是關於Server Push的,文章點這裡看,我自己把它的程式碼複製過來看了下效果,完整程式碼如下:
前臺:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 @ Page Language="C#" AutoEventWireup="true" CodeBehind="ServerPushDemo.aspx.cs" Inherits="WebDemo.ServerPush.ServerPushDemo" %>
2
3 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5 <html xmlns="http://www.w3.org/1999/xhtml" >
6 <head runat="server">
7 <title>無標題頁title>
8 <script type="text/javascript">
9 function SetValue(time)
10 {
11 document.getElementById("TbTime").value=time;
12 }
13 script>
14 head>
15 <body>
16 <form id="form1" runat="server">
17 <div>
18 <input type="text" id="TbTime"/>
19 div>
20 form>
21 body>
22 html>
23
後臺程式碼:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Threading;
namespace WebDemo.ServerPush
{
public partial class ServerPushDemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Buffer = true;
bool isOutput = false;
Response.Write("");
Response.Flush();
int lastsecond = 0;
while (Response.IsClientConnected)
{
Thread.Sleep(300);
if (DateTime.Now.Second != lastsecond && !isOutput)
{
lastsecond = DateTime.Now.Second;
Response.Write("
Response.Flush();
isOutput = true;
}
else
{
isOutput = false;
}
}
}
}
}
這種方式的實現原理其實就是在OnRender事件裡,用迴圈掛起連線,因為伺服器端沒有response完畢,所以一直和客戶端保持連線,雖然這種方式能實現伺服器端向客戶端的推送,但它的代價太大,因為web的優勢就是無連線。這樣每個客戶端都要佔用伺服器端的一個IIS連線,如果使用者超過百個,就會非常恐怖的。所以這種方式我覺得不可取,相比來說,還是用AJAX的方式定時輪詢更好。
真正意義上的Server Push好像我找了一些文章在Cgi裡可以實現,點這裡看。但在.net裡的實現我就不得而知了,知道的高人請指點下,呵呵。
我還搜到一個關於.net推技術的就是Comet框架,可以實現長連線的,具體文章請點這裡。改天我會把相關Demo發出來
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-629781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於IT,關於技術
- 關於推送uni-push
- 關於技術的選型
- 關於技術分享的思考
- 關於技術方案
- 關於技術文件
- 關於Oracle的技術問答Oracle
- 關於技術分享的一點感悟
- 關於技術選型的問題
- HTTP2 Server Push的研究HTTPServer
- 關於遊戲技術美術工程師的思考遊戲工程師
- 基於Kubernetes 構建.NET Core 的技術體系
- SQL SERVER 2005中的同步複製技術SQLServer
- 在SQL Server中,關於with as使用介紹SQLServer
- 關於資料庫壓縮技術的Survey資料庫
- 關於前端技術寫作✒,我想要說的?前端
- 關於大資料技術的一點思考大資料
- 關於多層交換技術的綜合應用
- 關於寫技術部落格的一點思考
- 關於runat = “server”Server
- 關於SQL Server 中的25種資料型別SQLServer資料型別
- 詳解.NET中的動態編譯技術編譯
- 關於編寫效能高效的javascript事件的技術JavaScript事件
- 關於技術趨勢,寫給奮鬥中的程式設計師們程式設計師
- ArborNetworksDDoS緩解技術用於企業
- NET技術大系概覽 (迄今為止最全的.NET技術棧)
- .NET技術大系概覽 (迄今為止最全的.NET技術棧)
- HTTP/2 Server Push 詳解(下)HTTPServer
- 技術管理進階——關於成長的話題
- 關於單測技術選型,聊聊我的思考
- 三分鐘看完關於 ChatGPT 的技術概括ChatGPT
- 關於量子技術的一些概念糾正
- 關於輪播圖的技術理解你知道多少
- SQL Server內建的HTAP技術SQLServer
- 關於 SAPGUI 事物碼在 Fiori Launchpad 中嵌入執行的技術細節GUI
- 關於netbackup恢復出現media server is not active 問題Server
- Android中基於HTTP的網路技術AndroidHTTP
- 技術關注:揭穿關於雲端計算的九大謊言