当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.net的服务器推技术 (Server Push)

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

2017年12月12日  | 移动技术网IT编程  | 我要评论
要想长时间保持服务器和浏览器之间的连接怎么办?长连接技术,这可不是什么新技术,用iframe作为隐藏帧指向长请求页面的方法早已被很多人运用在互联网上,但是iframe作为隐
要想长时间保持服务器和浏览器之间的连接怎么办?长连接技术,这可不是什么新技术,用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# 代码
复制代码 代码如下:

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不需要做修改。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网