连接利用Response.Flush和iframe实现”服务器推”技术

response.flush  时间:2021-04-17  阅读:()

利用Response.Flush和iframe实现”服务器推”技术

通过在HTML页面里陷入一个隐藏的iframe然后将这个iframe的src属性设为对一个长连接的请求利用chunked传输response 服务器端就能源源不断地往客户推送数据。

基于流方式的”服务器推”模型

服务端在接到客户端的请求时通过Response的Flush()方法发送数据可以使用定时器的方式发送数据没有数据也发送”无数据” ,让客户端保持长连接直至客户端断开连接请求结束。每次数据传送不会关闭连接连接只会在通信出现错误时或是连接重建时关闭一些防火墙常被设置为丢弃过长的连接 服务器端可以设置一个超时时间 超时后通知客户端重新建立连接并关闭原来的连接 。

实现代码

页面Default.aspx用来展示数据

1: 数据列表 o<br />

2: <div id="con" style=" width:400; height:200px; border: 1pxsolid #FF0">

3: </div>

4: <iframe id="flush" src="Flush.aspx" style=" display:none" />

5:ifame的src对应的Flash.aspx后台代码模拟后台发送数据

1: protected void Page_Load(object sender, EventArgs e)

2: {

3: string startHTML = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTDXHTML 1.0 Transitional//EN\"

\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" +Environment.NewLine

4: + "<html xmlns=\"http://www.w3.org/1999/xhtml\" >" +Environment.NewLine

5: + "<head>" + Environment.NewLine

6: + "</head>" + Environment.NewLine

7: + "<body>" + Environment.NewLine;

8:

9: startHTML += new String(' ' , 1024) + Environment.NewLine;

10:

11: Response.Write(startHTML) ;

12: Response.Flush() ;

13:

14: string data = "<scripttype=\"text/javascript\">parent. $('#con' ) .append(\"{0}\") ;</script>";

15: Response.Write(string.Format(data, "开始发送数据<br/>") ) ;

16: Response.Flush() ;

17:

18: int index = 0;

19: while (true)

20: {

21: System.Threading.Thread.Sleep(2000) ;

22: if (index % 2 == 0)

23: {

24: Response.Write(string.Format(data,

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "服务端发送数据<br/>") ) ;

25: }

26: else

27: {

28: Response.Write(string.Format(data,

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "无数据发送<br/>") ) ;

29: }

30: Response.Flush() ;

31:

32: index++;

33: }

34: }

35:

运行Default.aspx的结果

使用iframe请求一个长连接有一个很明显的不足之处 IE、 MorzillaFirefox下端的进度栏都会显示加载没有完成而且IE上方的图标会不停的转动表示加载正在进行刷新当前页面反应也是会很慢。

解决IE的进度栏显示加载没有完成可以使用一个称为“htmlfile”的ActiveX是Google的天才们使用的方法该控件也被用到gmail+gtalk产品中。

修改Default.aspx的页面代码

1: 数y据Y列D表í  o<br />

2: <div id="con" style=" width:400; height:200px; border: 1pxsolid #FF0">

3: </div>

4: <script type="text/javascript">

5: function getData(d)

6: {

7: $("#con") .append(d) ;

8: }

9:

10: function rpc_iframe() {

11: var transferDoc = new ActiveXObject("htmlfile") ;

12: transferDoc.open() ;

13: transferDoc.write("<html>")

14: transferDoc.write("<div><iframesrc=\"Flush.aspx\"></iframe></div>") ;

15: transferDoc.close("</html>") ;

16: transferDoc.parentWindow.getData = getData;

17: setInterval (function () { } , 10000) ; //不加这句会使连接断开

18: }

19:

20: rpc_iframe() ;

21: </script>

22:

修改Flush.aspx.cs代码

1: //string data = "<scripttype=\"text/javascript\">parent. $('#con' ) .append(\"{0}\") ;</script>";

2: string data = "<scripttype=\"text/javascript\">parent.getData(\"{0}\") ;</script>";

3:

Tag标签: Comet,服务器推,Response.Flush, iframe,htmlfile

PacificRack 端午节再来一款年付$38 VPS主机 2核4GB内存1TB流量

这不端午节和大家一样回家休息几天,也没有照顾网站的更新。今天又出去忙一天没有时间更新,这里简单搜集看看是不是有一些商家促销活动,因为我看到电商平台各种推送活动今天又开始一波,所以说现在的各种促销让人真的很累。比如在前面我们也有看到PacificRack 商家发布过年中活动,这不在端午节(昨天)又发布一款闪购活动,有些朋友姑且较多是端午节活动,刚才有看到活动还在的,如果有需要的朋友可以看看。第一、端...

VinaHost,越南vps,国内延时100MS;不限流量100Mbps

vinahost怎么样?vinahost是一家越南的主机商家,至今已经成13年了,企业运营,老牌商家,销售VPS、虚拟主机、域名、邮箱、独立服务器等,机房全部在越南,有Viettle和VNPT两个机房,其中VNPT机房中三网直连国内的机房,他家的产品优势就是100Mbps不限流量。目前,VinaHost商家发布了新的优惠,购买虚拟主机、邮箱、云服务器、VPS超过三个月都有赠送相应的时长,最高送半年...

RAKsmart 2021新年新增韩国服务器及香港美国日本VPS半价

RAKsmart 商家我们肯定不算陌生,目前主要的营销客户群肯定是我们。于是在去年的时候有新增很多很多的机房,比如也有测试过的日本、香港、美国机房,这不今年有新增韩国机房(记得去年是不是也有增加过)。且如果没有记错的话,之前VPS主机也有一次磁盘故障的问题。 这不今天有看到商家新增韩国服务器产品,当然目前我还不清楚商家韩国服务器的线路和速度情况,后面我搞一台测试机进行...

response.flush为你推荐
如何设置浏览器允许弹出窗口支持ipad流量支付宝齐鲁工业大学高水平学科建设专项eacceleratoraccess violation问题的解决办法!netbios端口netbios ssn是什么意思?photoshop技术ps是一种什么技术??????联通版iphone4s苹果4s是联通版,或移动版,或全网通如何知道?360chrome360Chrome 世界之窗极速浏览器 ChromePlusicloudiphone没开启icloud的iphone怎么用find my iphone找回
华众虚拟主机管理系统 如何注册域名 vps是什么 如何查询ip地址 t楼 jsp主机 tier 59.99美元 远程登陆工具 好看qq空间 adroit 支持外链的相册 登陆空间 网页提速 英国伦敦 帽子云排名 浙江服务器 徐州电信 可外链的相册 购买空间 更多