豪仕知识网--知识就是力量!

微信
手机版
生活常识

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

作者 :姑苏慕容 2024-01-03 09:04:51 围观 : 评论

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

豪士君测试所用平台

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

利用Response.Flush和iframe实现”服务器推”技术,一起来看看吧,希望能帮助到您,更多请关注豪仕知识网。

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

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

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

实现代码:

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识网HTtp://www.haoZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

页面Default.aspx,用来展示数据:

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

1: 数据列表:o2: 3: 4: 5:

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

1: protected void Page_Load(object sender, EventArgs e)2: { 3: string startHTML = "" + Environment.NewLine 4: + "" + Environment.NewLine 5: + "" + Environment.NewLine 6: + "" + Environment.NewLine 7: + "" + Environment.NewLine; 8: 9: startHTML += new String(' ', 1024) + Environment.NewLine; 10:11: Response.Write(startHTML); 12: Response.Flush(); 13: 14: string data = ""; 15: Response.Write(string.Format(data, "开始发送数据:")); 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") + " 服务端发送数据")); 25: }26: else 27: { 28: Response.Write(string.Format(data, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 无数据发送"));29: } 30: Response.Flush(); 31: 32: index++; 33: } 34: } 35:

http://www.haoz.net●☛█▼▲◐●☛█▼▲◐◐◐◐●☛█▼▲◐豪仕知识网●☛█▼▲豪仕知识网

运行Default.aspx的结果:

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

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

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

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

修改Default.aspx的页面代码:

1: 数y据Y列D表í:o 2: 3: 4: 22:

修改Flush.aspx.cs代码:

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

1: //string data = ""; 2: string data = ""; 3:

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

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

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

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

实现代码:

页面Default.aspx,用来展示数据:

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

1: 数据列表:o2: 3: 4: 5:

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

1: protected void Page_Load(object sender, EventArgs e)2: { 3: string startHTML = "" + Environment.NewLine 4: + "" + Environment.NewLine 5: + "" + Environment.NewLine 6: + "" + Environment.NewLine 7: + "" + Environment.NewLine; 8: 9: startHTML += new String(' ', 1024) + Environment.NewLine; 10:11: Response.Write(startHTML); 12: Response.Flush(); 13: 14: string data = ""; 15: Response.Write(string.Format(data, "开始发送数据:")); 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") + " 服务端发送数据")); 25: }26: else 27: { 28: Response.Write(string.Format(data, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 无数据发送"));29: } 30: Response.Flush(); 31: 32: index++; 33: } 34: } 35:

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

运行Default.aspx的结果:

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

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

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

修改Default.aspx的页面代码:

1: 数y据Y列D表í:o 2: 3: 4: 22:

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

修改Flush.aspx.cs代码:

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

1: //string data = ""; 2: string data = ""; 3:

关于利用Response.Flush和iframe实现”服务器推”技术的内容到此结束,希望对大家有所帮助。豪仕知识网往后会继续推荐利用Response.Flush和iframe实现”服务器推”技术相关内容。

相关文章