ASP网页编程之server push详细完成(转)
asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。server拙作“推”向更快宣布后,笔者收到了良多伴侣的来信,但愿能懂得更多的关于SERVERPUSH的手艺材料,说假话对这一新手艺笔者也不是太懂得,但本着各抒己见的头脑,在这里依据笔者的实践利用情形作一些具体的先容,但愿给那些对SERVERPUSH有乐趣的伴侣一点点的匡助和参考。也但愿能借此举一反三,求得妙手的不吝珠玉。“推”因为篇幅的缘故原由,只对SERVERPUSH作了一样平常的先容,上面我们来看看SERVERPUSH的详细完成历程:
1、功课体系:
今朝SERVERPUSH还不克不及在WIN9X上完成,最少是我本人还没有在WIN9X作为主机上完成过这一功效。经笔者实验乐成的功课体系有:WINNT4.0,UNIX,LINUX,FREEBSD,以LINUX撑持最好。由于我利用的LINUX都是最新的版本,能够便利地编译最新的功效模块。固然另有别的的功课体系也能很好地撑持SERVERPUSH功效,但笔者限于前提没有测试过。
2、WWW服务器:
实在今朝除IIS和APACHE这两个WWW服务器,你没有更好的选择,值得庆辛的是它们都能很好地撑持SERVERPUSH,固然你应当选择它们的最新版。其余那些小孩子过家家那样的WWW服务器就不必试了。在这里笔者尽力保举在LINUX上安装APACHE,以便能自在编译功效模块,如许能够充实利用SERVERPUSH、FASTCGI、E-CGI、HPH等新的扩大功效。
3、剧本撑持:
固然SERVERPUSH能够用更多的剧本程序来编写,但笔者激烈保举用PERL或C言语来写CGI剧本,由于PERL已是CGI剧本程序现实上的尺度。并且在PERL5中已能够间接挪用C子程序而不必要任何声明。不论你用甚么言语来写CGI剧本,注释器中应当有CGI.PM模块,笔者试用的版本是5.004,这一模块的更新版人人能够从网高低载,找不到?用搜刮引擎输出CGI.PM就好了,要几个都有。
好了,有了下面的工具,上面我们就来写一个SERVERPUSH程序来讲明它的完成历程:
#!/usr/bin/perl
useCGIqw/:push-nph/;
$|=1;
printmultipart_init(-boundary=>--boundary);
while(1){
printmultipart_start(-type=>text/plain),
"Thecurrenttimeis",scalar(localtime),"n",
multipart_end;
sleep1;
}
useCGIqw/:push-nph/;这一行告知CGI注释程序,挪用撑持SERVERPUSH的功效模块(CGI.PM),在这个模块中事后界说了三个涵数:multipart_init()、multipart_start()和multipart_end,只需在程序中有useCGIqw/:push-nph/声明。就能够间接利用这三个涵数。
multipart_init()涵数的感化是声了然一个文档范例,就象一般的CGI程序中的“Content-Type:text/html”声明,告知服务器上面传送的是HTML文档,而multipart_init()这一涵数声明的文件范例倒是完成SERVERPUSH最基本的办法范例:Content-Type:multipart/x-mixed-replace;boundary=--boundary假如你对HTTP的MIME范例有具体的懂得,你就晓得multipart范例是一种复合范例,它的子范例是mixed,子范例的X参数人人能够参看具体的MIME范例申明,这里最关头的是replace办法,它一直地用新吸收的数据更新旧的数据。这,就是SERVERPUSH最年夜的手艺内在。boundary只是一个界限值,告知扫瞄器从这儿入手下手,利用SERVERPUSH办法了。实在你完整能够如许了解,只需在剧本程序中声了然multipart/x-mixed-replace;boundary=--boundary如许一个文档范例,服务器就和客户机创建了一个出格的保持。服务器就不休地把客户机哀求的数据络绎不绝地推向了客户机。而传统的CLIENTPULL办法是:1、CLIENT和SERVER创建保持。2、CLIENT发送哀求。3、SERVER呼应哀求。4、SERVER断开保持以呼应下一哀求。经由过程这两种办法的对照人人能够看出SERVERPUSH长处次要在于服务器和客户机之间这类不中断的保持体例。使得它不必要接纳CLIENTPULL的<METAhttp-equiv=refreshcontent="n">这类办法来革新页面,不但更新速率快,并且不会发生明灭效果。
能够看到,假如你不必multipart_init(),间接在剧本程序顶用如许的语句也能够到达一样的目标:
print"Content-Type:multipart/x-mixed-replace;boundary=boundarynn"
如许做的优点是当体系不克不及撑持multipart_init()涵数时,就能够间接如许声明.
multipart_start()这个涵数是为服务器指定了传送一个断定的文档,假如不必这个涵数,依据剧本程序的内容服务器能够间接把指定命据传送给客户机,固然客户机不克不及辨认这类范例的文档能够疏忽而不会发生毛病。但假如你指了然详细的文档范例,如例程中的text/plain(纯文本范例),客户机就不要再对文档加以剖析从而进步了处置速率。不然客户机只晓得传送过去的是multipart(复合型)而要从头对其剖析。
至于multipart_end涵数不需作具体申明,只是申明了一个PUSH历程的停止。
为了使人人能更好地舆解这三个涵数具体的手艺内容,我把这三个涵数的完成历程剖析给人人:
submultipart_init{
my($self,@p)=self_or_default(@_);
my($boundary,@other)=$self->rearrange(,@p);
$boundary=$boundary||-------=_aaaaaaaaaa0;
$self->{separator}="n--$boundaryn";
$type=SERVER_PUSH($boundary);
return$self->header(
-nph=>1,
-type=>$type,
(map{split"=",$_,2}@other),
).$self->multipart_end;
}
submultipart_start{
my($self,@p)=self_or_default(@_);
my($type,@other)=$self->rearrange(,@p);
$type=$type||text/html;
return$self->header(
-type=>$type,
(map{split"=",$_,2}@other),
);
}
submultipart_end{
my($self,@p)=self_or_default(@_);
return$self->{separator};
}
别的的在利用SERVERPUSH时的一些技能,限于篇幅我不克不及再作过量的先容,人人能够到上面地点看看我用SERVERPUSH写的谈天室,接待有乐趣的伴侣和我交换。
谈天室地点:http://wangjh.3322.net/chat.htm,保密哦,这是一个收费团体主页空间,不让放谈天室,网管晓得了就会DEL了的。
原wangjinhua
http://bj.netease.com
</p>ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊! 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
页:
[1]