|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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([BOUNDARY],@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([TYPE],@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是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊! |
|