Asp.net的服务器推技术 (Server Push)
2010-01-22 00:00
696 查看
要想长时间保持服务器和浏览器之间的连接怎么办?长连接技术,这可不是什么新技术,用IFrame作为隐藏帧指向长请求页面的方法早已被很多人运用在互联网上,但是IFrame作为隐藏帧有一个弊端,那就是浏览器的进度条始终处在读取状态。为了使用户获得更好体验,“Google的天才们”使用了一个叫“htmlfile”的对象解决了这一问题,并把它运用了了GMail和GTalk两个产品上。
如今我们公司要做的新项目上要求有实时报警功能,本来我想用AJAX轮询做,但是觉得挺没追求的,前段时间听说有了Server Push,但是没仔细研究,这次倒是个机会,一天时间,从网上搜集资料。资料不是很多,而且现在有很多开发人员还认为长连接是天方夜谭,居然还有把HTTP协议搬出来要证明自己观点的……
废话不多说了,来介绍一下长连接技术,通常的长链接就是做一个网页,里面写好一个IFrame标签,高宽设置为0,SRC属性指向一个网页,比如是ASPX,然后在这个文件中不做别的,只是在调用Context.Response.Write方法,输出什么?比如客户端有一个更改时间的方法Change(time),那输出就是("<script>window.parent.Change("+DateTime.Now.ToString()+")</script>"),也就是不断的输出客户端的函数调用,并且做成死循环,这样浏览器和服务器端就形成了一条源源不断的数据传输链接。
那htmlfile是什么呢?这是一个类似Javascript中Window对象的一个ActiveXObject,它内部也是DOM结构,将作为隐藏帧的IFrame写入这个对象中,就可以解决进度条的问题。说的可能比较晦涩,来看实例代码吧:
Default.aspx.cs
c# 代码
WebForm1.aspx
Default.aspx不需要做修改。
serverpush.rar
如今我们公司要做的新项目上要求有实时报警功能,本来我想用AJAX轮询做,但是觉得挺没追求的,前段时间听说有了Server Push,但是没仔细研究,这次倒是个机会,一天时间,从网上搜集资料。资料不是很多,而且现在有很多开发人员还认为长连接是天方夜谭,居然还有把HTTP协议搬出来要证明自己观点的……
废话不多说了,来介绍一下长连接技术,通常的长链接就是做一个网页,里面写好一个IFrame标签,高宽设置为0,SRC属性指向一个网页,比如是ASPX,然后在这个文件中不做别的,只是在调用Context.Response.Write方法,输出什么?比如客户端有一个更改时间的方法Change(time),那输出就是("<script>window.parent.Change("+DateTime.Now.ToString()+")</script>"),也就是不断的输出客户端的函数调用,并且做成死循环,这样浏览器和服务器端就形成了一条源源不断的数据传输链接。
那htmlfile是什么呢?这是一个类似Javascript中Window对象的一个ActiveXObject,它内部也是DOM结构,将作为隐藏帧的IFrame写入这个对象中,就可以解决进度条的问题。说的可能比较晦涩,来看实例代码吧:
Default.aspx.cs
c# 代码
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected override void Render(HtmlTextWriter output) { string str; while (true) {//死循环保持长链接 str = "<script >window.parent.Change('" + DateTime.Now.ToLongTimeString() + "')</script>"; this.Context.Response.Write(str); this.Context.Response.Flush();//输脚本调用出 System.Threading.Thread.Sleep(1000); } } }
WebForm1.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Asp.net Server Push</title> <script type="text/javascript"> function Change(str){ window.document.getElementById("div1").innerText=str; } function onload(){ var ifrpush = new ActiveXObject("htmlfile"); // 创建对象 ifrpush.open(); //打开 var ifrDiv = ifrpush.createElement("div"); //添加一个DIV ifrpush.appendChild(ifrDiv); //添加到 htmlfile ifrpush.parentWindow.Change=Change; //注册 javascript 方法 搞不明白为什么还要注册 ifrDiv.innerHTML = "<iframe src='Default.aspx'></iframe>"; //在div里添加 iframe ifrpush.close(); //关闭 } onload(); </script> </head> <body> <div style=" float:left">现在时间是:</div> <div id="div1"></div> </body> </html>
Default.aspx不需要做修改。
serverpush.rar
相关文章推荐
- Asp.net的服务器推技术 (Server Push) - .NET
- Asp.net的服务器推技术 (Server Push) - .NET
- Asp.net 的 服务器推技术 (Server Push)
- asp.net服务器推送(ServerPush)和客户端拉拽技术
- Asp.net 的 服务器推技术 (Server Push)
- Asp.net的服务器推技术 (Server Push)(采用持久链接+死循环)
- Asp.net的服务器推技术 (Server Push)
- asp.net 服务器推送(Server Push)
- Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接 (续)
- asp.net 服务器推送(Server Push) 支持 IE、火狐、谷歌等 仅供参考
- Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接
- 一起谈.NET技术,Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接
- asp.net 服务器推送(Server Push)
- asp.net 服务器推送(Server Push) 支持 IE、火狐、谷歌等 仅供参考
- asp.net 服务器推送(Server Push)
- ASP.NET Core默认提供的这个跨平台的服务器KestrelServer
- 无法在WEB服务器上启动调试.未能启动ASP.NET或ATL SERVER 调试
- 解决 web服务器部署常见问题,server application unavailable 和 程序无法连接数据库 的问题(asp.net 2.0 + oracle9i + winXP)
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(3)从零开始开发服务器控件