`
miss4813
  • 浏览: 104891 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Asp.net的服务器推技术 (Server Push)

阅读更多
   在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知。但是这种轮询方式的访问有90%是在做无用功。
  要想长时间保持服务器和浏览器之间的连接怎么办?长连接技术,这可不是什么新技术,用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
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>
分享到:
评论
1 楼 yue_1986_2010 2010-07-04  
我现在也在做实时报警信息显示的页面。我用你这个过一段时间自己就停下来了呢?

相关推荐

    ASP.NET(C#) ServerPush

    ASP.NET (C#) ServerPush 是一种技术,用于在服务器端主动向客户端推送数据,而无需客户端持续发起请求。在传统的HTTP协议中,浏览器与服务器之间的通信基于请求-响应模型,即客户端发起请求,服务器返回响应。然而...

    .net 服务器推送

    它支持多种后端技术(如ASP.NET Core或ASP.NET)和多种传输方式(包括WebSocket、Long Polling、Server-Sent Events等)。SignalR提供了简单的API,使得在C#中实现服务器推送变得容易,只需几行代码即可实现连接、...

    asp.net server push 长连接

    ASP.NET Server Push 长连接技术是一种用于实时通信的技术,它允许服务器主动向客户端推送数据,而无需客户端频繁发起请求。这种技术在实时性要求较高的应用中,如在线聊天、股票更新、游戏同步等场景非常有用。传统...

    asp.net server push长连接 源码示例

    ASP.NET Server Push是一种技术,它允许服务器主动向客户端发送数据,而无需客户端发起新的请求。在传统的HTTP协议中,客户端需要先发起请求,服务器才能响应数据。然而,Server Push技术打破了这种模式,使得实时性...

    ASP.NET WEB端消息推送源码

    ASP.NET Web端消息推送技术是构建现代Web应用的关键部分,特别是在实时交互和移动设备支持方面。这个源码包显然提供了一种解决方案,使得开发者能够通过ASP.NET平台向Android和iOS等手机端推送消息。让我们深入了解...

    ASP.NET 主动推送

    而Server Push技术则打破了这种模式,它利用持久连接保持客户端和服务器之间的通道开放,当服务器有新数据时,可以直接推送到客户端,提高了数据传输的效率。 ASP.NET 提供了多种实现主动推送的方式,包括WebSocket...

    ServerPush(服务器推送)

    "ServerPush"可能是一个实现了服务器推送功能的ASP.NET项目,"项目说明.txt"可能包含了项目的详细说明和使用指南,而"Fsrm.ServerPushChat"可能是一个示例应用,展示了如何使用服务器推送技术实现聊天功能。...

    ASP.NET中ServerPush用法实例分析

    只有浏览器请求服务器端,服务器端才给浏览器响应数据,不会主动向浏览器推送数据,这是一种安全考虑,也是提高服务器的性能考虑,如果服务器向浏览器主动推送数据,就要用到ServerPush等技术模拟实现。 举个例子: ...

    【ASP.NET编程知识】ASP.NET MVC中SignalR的简单应用.docx

    ASP.NET MVC 中 SignalR 的简单应用 ...它支持“服务器推送”功能,可以实现服务器主动推送消息到客户端页面,是一个非常有用的技术在 ASP.NET MVC 中使用 SignalR 可以提高应用程序的实时性和交互性。

    微软开源的SignalR .Net客户端实现ASP.NET SignalR.zip

    - server push 利器http://www.codeproject.com/Articles/584845/SignalR-as-a-Service Pushing ETW events through SignalRComet:基于 HTTP 长连接的“服务器推”技术解析ASP.NET SignalR Basis Step by Step ...

    服务器推送示例 - IE/火狐/谷歌 长链防断实用版

    首先,服务器推送在ASP.NET框架下可以利用多种技术实现。一种常见的方式是使用HTTP长轮询(Long Polling)。这种方法通过保持一个HTTP连接打开,直到服务器有新的数据要发送或连接超时。在本示例中,可能已经解决了...

    asp.net读取IE历史记录

    总结来说,虽然ASP.NET本身不能直接读取用户的IE历史记录,但可以通过结合JavaScript和AJAX技术,从客户端获取并在服务器端进行处理。这种方法需要谨慎使用,确保尊重用户的隐私,并符合相关法律法规。

    Asp.net 2.0 用FileUpload 控件实现多文件上传

    然而,由于ASP.NET 2.0的限制,我们还需要使用JavaScript或jQuery来处理多个FileUpload控件,并将选中的文件信息序列化为JSON,然后通过一个隐藏的表单字段发送到服务器。 在代码实现过程中,我们可以按照以下步骤...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    在 VS2005 中,我们可以创建 ASP.NET Web 应用程序,并结合 AJAX 控件工具包(ASPAJAXExtSetup.msi 和 ASPAJAXCTP.msi 文件可能用于安装这些工具)来构建支持长轮询的 ServerPush 功能。 1. **创建 Web 应用**:...

    .NET技术学习大纲

    掌握Server Push技术,熟悉Global对象的使用。了解URL重写机制,掌握缓存的管理方法。比较母版页与SSI(Server Side Includes)的不同之处,学习网站部署与IIS配置的相关知识。 #### 第六部分:ASP.net MVC - **EF...

    水晶报表教程ASP.net

    2. "水晶报表push模式教程.exe":Push模式是水晶报表的一种工作模式,它允许服务器主动向客户端推送数据。这个教程可能讲解了如何在ASP.NET环境中配置和使用Push模式,以提高报表的实时性。 3. "jansen系列水晶报表...

    ASP 推箱子游戏 很好玩的

    ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于创建动态网页或Web应用程序。在ASP中,开发者可以使用多种编程语言,如VBScript或JScript,来编写服务器端的脚本,这些脚本会在服务器上执行并...

Global site tag (gtag.js) - Google Analytics