程序第二行告诉CGI解释程序来调用支持Server Push 的功能模块(CGI.PM),在这个模块中预先定义了三个函数:multipart—init()、multipart—start()和multipart—end,只要在程序中有use CGI qw/:push -nph/声明,就可以直接使用这三个函数。
multipart—init()函数的作用是声明一个文档类型,就像普通的CGI程序中的“Content-Type: text/html”声明,告诉服务器下面传送的是HTML文档,而multipart—init()这一函数声明的文件类型却是实现Server Push最根本的方法类型:
Content-Type: multipart/x-mixed-replace; boundary=′--boundary′
如果你对HTTP的MIME类型有详细的了解,你就知道multipart 类型是一种复合类型,它的子类型是mixed,子类型的X参数,大家可以参看详细的MIME类型说明,这里最关键的是replace方法,它不停地用新接收的数据更新旧的数据,这就是 Server Push最大的技术内涵。boundary只是一个边界值,告诉浏览器从这儿开始,使用Server Push方法了。其实你完全可以这样理解,只要在脚本程序中声明了如multipart/x-mixed-replace 这样一个文档类型,服务器就和客户机建立了一个特别的连接。服务器就不断地把客户机请求的数据源源不断地推向了客户机。而传统的 Client PULL方法则是:
1.Client 和Server建立连接;
2.Client发送请求到Server;
3.Server响应请求;
4.Server 断开连接以响应下一请求。
通过这两种方法的比较,大家可以看出Server Push优点主要在于服务器和客户机之间这种不间断的连接方式,使它不需要采用Client PULL的〈META http-equiv=refresh content=″n″〉这种方法来刷新页面,不仅更新速度快,而且不会产生闪动效果。
如果你不用multipart—init()而直接在脚本程序中用以下语句也可以达到同样目的:print ″Content-Type: multipart/x-mixed-replace; boundary=′boundary′\n\n″。当系统不支持multipart—init()函数时,就可以直接这样声明。