生活随笔
收集整理的這篇文章主要介紹了
关于.NET中的Server push技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于.NET中的Server push技術
一般來說方法有2種,一種就是客戶端用JS異步定時輪詢服務器端,這種是大部分人采用的方法,但是我在想到底可以不可以實現服務器端有改變時才會主動推送到客戶端呢?按理來說這種方式對于B/S是不可能實現的,因為B/S是無連接的,這種request/response的方式無法保持狀態。搜了一下,看到博客園有位朋友寫了篇文章是關于Server Push的,文章點這里看,我自己把它的代碼復制過來看了下效果,完整代碼如下:
前臺:
| 以下為引用的內容: 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? |
后臺代碼:
| 以下為引用的內容: 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("<script>SetValue('"?+?DateTime.Now.ToString()?+?"') ?</script>?"); ????????????????????Response.Flush(); ????????????????????isOutput?=?true; ????????????????} ????????????????else ????????????????{ ????????????????????isOutput?=?false; ????????????????}
????????????}
????????} ????} } |
這種方式的實現原理其實就是在OnRender事件里,用循環掛起連接,因為服務器端沒有response完畢,所以一直和客戶端保持連接,雖然這種方式能實現服務器端向客戶端的推送,但它的代價太大,因為web的優勢就是無連接。這樣每個客戶端都要占用服務器端的一個IIS連接,如果用戶超過百個,就會非常恐怖的。所以這種方式我覺得不可取,相比來說,還是用AJAX的方式定時輪詢更好。
真正意義上的Server Push好像我找了一些文章在Cgi里可以實現,點這里看。但在.net里的實現我就不得而知了,知道的高人請指點下,呵呵。
我還搜到一個關于.net推技術的就是Comet框架,可以實現長連接的,具體文章請點這里。改天我會把相關Demo發出來.
總結
以上是生活随笔為你收集整理的关于.NET中的Server push技术的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。