`
sony-soft
  • 浏览: 1027520 次
文章分类
社区版块
存档分类
最新评论

页面实时刷新技术探讨

 
阅读更多

页面实时刷新技术探讨

url:http://blog.csdn.net/skysandy/archive/2009/08/17/4455480.aspx

最近,公司做一个交通软件产品,需要实现页面实时刷新,baidu了不少资料,但没有真正解决实时刷新页面问题。我们都知道,访问网页是基于HTTP协议,即要通过request/response的方式访问服务器,如果客户端不去主动请求,服务器端是不会主动给客户端返回客户端所需的信息的,基于此,B/S永远不可能实现真正的服务器端"PUSH"模式。

但以上并不等于说我们无法实时获取到服务端的实时信息,以下是从网上搜索的一些实现方式,总结了一下:

客户端“PULL”模式

页面定时刷新

隔一段时间,刷新一次页面,重新查询数据库的方式。大大增加了服务器的负载。

观察者模式

客户端部分,把显示实时数据的部分做成无刷新的,通过轮询服务端的更新变量,但是不是查数据库,而是访问服务器端标志,该标志用来标志最近数据是否更新。如果标志显示数据被更新,再查询数据库并返回。

服务器“PUSH”模式

ActiveX控件

提示用户下载安装,还要向微软申请许可证,否则当用户打开网页时显示是否安装ActiveX,将会显示该控件没有经过安全认证,可能会危害你的计算机的提示信息。

Ajax push组件

采用异步通信方式,XmlHttpRequest提供的异步请求方式对于请求应答时常没有什么特别的限制,符合我们与服务器建立长期连接的需求。

服务器端会阻塞请求直到有数据传递或超时才返回。

客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。

当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

Flash XMLSocket

HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信。JavaScript 在收到夫务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示。

缺点:

客户端必须安装 Flash 播放器;

因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙;

因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制;

网络聊天室,网络互动游戏中已得到广泛使用

Java Applet 套接口

在客户端使用 Java Applet,通过 java.net.Socket java.net.DatagramSocket java.net.MulticastSocket 建立与服务器端的套接口连接,从而实现服务器推

这种方案最大的不足在于 Java applet 在收到服务器端返回的信息后,无法通过 JavaScript 去更新 HTML 页面的内容。

以上实现方式,我基本上都作了一个Demo,综合比较考虑,使用xmlHTTP的方式实现起来比较方便。具体实现代码如下:
服务器端:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(HttpContext.Current.Server.MapPath("newPic.xml"));
XmlNodeList nodeList = xmlDoc.SelectSingleNode("Items").ChildNodes;

XmlElement element = (XmlElement)nodeList[0];
string picPath = "Pic/" + element.GetAttribute("code") + ".jpg";

Label1.Text = element.GetAttribute("code");
imgCtrl.ImageUrl = picPath;

//imgCtrl.ImageUrl = "server.aspx";
}
}

客户端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="client.aspx.cs" Inherits="client" %>

<!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></title>
<meta http-equiv="Content-Type" content="text/html; Charset=gb2312" />
<script type="text/javascript">
var xmlHttp;
function CreateXMLHttp()
{
if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e) { }
}
}
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.5.0");
}

function startXMLHttp()
{
CreateXMLHttp();
xmlHttp.onreadystatechange =dodo;
xmlHttp.open("post","server.aspx",true);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded charset=gb2312");
xmlHttp.send();
}

function dodo()
{
if(xmlHttp.readystate==4)
{
if(xmlHttp.status==200)
{
var retValue = xmlHttp.responseText;
var new1 = retValue.split("Pic/")[1].substring(0,18);

var nowValue = document.getElementById("Content").innerHTML;
if(nowValue.split("Pic/")[1] == null)
document.getElementById("Content").innerHTML=xmlHttp.responseText;
else
{
var new2 = nowValue.split("Pic/")[1].substring(0,18);
if(new1!=new2)
{ document.getElementById("Content").innerHTML=xmlHttp.responseText; }
}
// document.getElementById("Content").innerHTML=xmlHttp.responseText;
}
setTimeout(startXMLHttp,1000);
}
}
</script>
</head>
<body onload='Javascript:startXMLHttp()'>
<div></div>
<span id="Content">No Pic</span>
</body>
</html>
代码比较简单,相信大家基本能懂

分享到:
评论

相关推荐

    基于B-S方式的即时通讯软件的设计与实现

    即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越...使用最新的Ajax技术,使其非常快,无需等待页面的刷新,实现了即时通讯的功能。

    AJAX关键技术及其在软件开发中的应用

     AJAX采用异步调用方式进行局部页面的刷新,并以浏览器为基础创建多种应用,为用户提供良好的交互使用体验。  鉴于AJAX非凡的体验效果及良好的界面表现力,其不仅受到了业内的青睐和大力追捧,更展现了广阔的应用...

    比较详细的Asp伪静态化方法及Asp静态化探讨

    目前,各大搜索引擎如google、百度、雅虎已经对动态页面诸如asp,php有着不错的支持了,只要动态页面后面的参数不要太长,如控制... 有的网站,其要求与用户有着较强的交互性,互动性,页面刷新很快,更新的内容也很多

    jQuery基础教程(第四版)

    第6章讨论通过jQuery轻松访问服务器端功能的各种方法,而且不用像过去那样笨拙地刷新页面。在掌握了这个库的基本概念之后,接下来就可以探索如何根据需要来扩展这个库了。 第7章介绍如何查找、安装和使用插件,包括...

    css 中的定位详解

    但是在练习中,这通常会导致延迟或闪动的页面刷新。如果针对的是早期版本的 IE,那么在决定采用固定定位解决方案之前,应该多多思考和测试。 内容摘自《CSS 与 Dreamweaver CS3 完美网页设计》

    ASP.Net可切换皮肤的后台源码

    本人的CSS和JAVASCIRPT的功底有限,开发的东西难免会有些BUG或者很肤浅的地方,希望和朋友们一起探讨解决其中的一些问题。也非常希望高手们优化我JS。 功能介绍: 1、可以换皮肤、其中住框架、具体页面可以统一使用...

    大名鼎鼎的IBM公司 Ajax 培训资料

    但在详细探讨 Ajax 是什么之前,先让我们花几分钟了解 Ajax 做 什么。目前,编写应用程序时有两种基本的选择:  桌面应用程序  Web 应用程序 两者是类似的,桌面应用程序通常以 CD 为介质(有时候可从网站...

    VC与Labview、Matlab编程论文资料[2].rar

    基于LabVIEW的实时控制与仿真技术应用研究.pdf 基于LabVIEW的数据库访问技术.pdf 基于LabVIEW的数据访问及报表生成技术.pdf 基于LabVIEW的数据采集_监测系统设计.pdf 基于LabVIEW的数据采集与信号处理系统的设计.pdf...

    VC与Labview、Matlab编程论文资料

    基于LabVIEW的实时控制与仿真技术应用研究.pdf 基于LabVIEW的数据库访问技术.pdf 基于LabVIEW的数据访问及报表生成技术.pdf 基于LabVIEW的数据采集_监测系统设计.pdf 基于LabVIEW的数据采集与信号处理系统的设计.pdf...

    VC与Labview、Matlab编程论文资料[4].rar

    基于LabVIEW的实时控制与仿真技术应用研究.pdf 基于LabVIEW的数据库访问技术.pdf 基于LabVIEW的数据访问及报表生成技术.pdf 基于LabVIEW的数据采集_监测系统设计.pdf 基于LabVIEW的数据采集与信号处理系统的设计.pdf...

    浅析Ajax语法

    Ajax是目前很普遍的一门技术,也是很值得探讨和研究的一门技术。本文将针对Ajax的发展过程并结合其在不同库框架中的使用方式来和大家分享下Ajax的那些新老语法。 Ajax简介 Ajax全称为“Asynchronous Javascript And ...

    Ajax的语法浅析

    Ajax是目前很普遍的一门技术,也是很值得探讨和研究的一门技术。本文将针对Ajax的发展过程并结合其在不同库框架中的使用方式来和大家分享下Ajax的那些新老语法。Ajax全称为“AsynchronousJavascriptAndXML”,即...

    季风流量统计系统

    1:多用户统计系统,防止刷新,速度快,适用广泛 2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的...

    0510_jspcount.rar

    1:多用户统计系统,防止刷新,速度快,适用广泛 2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的...

    asp.net知识库

    如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup ...

    JavaScript基础教程第8版

    《JavaScript基础教程(第8版)》循序渐进地讲述了JavaScript及相关的CSS、DOM、Ajax、jQuery等技术。书中从JavaScript语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式、用户事件和cookie,并在上...

    易语言家庭影音播放器源码

    ' 有,本站易语言资源网整理收集仅供易语言用户学习和易语言技术研 ' 究探讨使用,不得用于任何商业用途。如果由于以上原因造成的版权 ' 纠纷本站概不负责! ' * 本站资源未经许可,任何网站不得非法盗链及抄袭本站...

Global site tag (gtag.js) - Google Analytics