用Perl数据路由技术定制事务处理

ZDNet软件频道 时间:2002-07-16 作者:BUILDER.COM |  我要评论()
本文关键词:
在通常的情况下,简单的客户-服务器模式对你的Web应用程序来说是不能充分胜任的,因此你必须知道如何应对多个Web服务器操作的案例。本文提到的简单解决方案实现了基于数据的路由方式。
编写处理逻辑

第1步就是把提交的表单数据暴露给Perl。这是CGI模块的常规用法:创建查询对象。

在我们的例子中,我们假设表单提交包含了一个参数:service_class。这个参数确定提交给什么系统。其选择是Premium、Standard或者Basic Web服务器应用程序。也许机构对客户在不同价位的忠诚度很敏感,希望向不同的客户组提供不同的网页。航空公司或者酒类客户都是这样的例子。虽然示例中的数据路由很简单,无非是把一个服务类别号码转换为对应的目标URL,不过,只要你需要尽可大加改进而变得更为复杂,你可以分析所有的表单字段和/或cookies,还可能引用邮政编码甚至采用外部数据库。

下面开始谈具体的技术问题,就是如何构造一个新的HTTP请求。这个CGI程序也是一个Web客户程序,它会向其他服务器发出请求酒好象自己是个浏览器。创建新的请求需要采用一组HTTP头,也就是HTTP::Headers 对象。通过CGI传递给Perl的信息收集到这个新的请求里来。常用的请求类型有两种:GET和POST(不支持HEAD)。新的请求类型可以同原有的不同,虽然在我们的例子中它们是一样的。

接着把请求发送给选定的真正目标服务器。你可以创建一个LWP::UserAgent对象打开低级网络连接供请求发送,然后用一行代码发送请求报头(加上POST内容)并等待响应。真实用户(以及这个CGI程序)发出的原始请求会被挂起直到新的请求完成。乍看起来这种延迟是完全没必要的,但是这个CGI程序到目前为止又不做其他事无非是处理下报头,原来的请求则以直接在程序中编码的方式被服务器挂起。所以会产生一定的耗时负载。

最后,你终于等到了响应。除非这个Perl脚本和最终的表单目标之间出了问题,否则随响应带回的数据就是一些HTML内容,可以显示在用户的浏览器上。因为脚本是提供浏览器内容的CGI程序,所以你只需要重复第2台Web服务器发回的信息即可。

动手之前的思考

为了采用本文的示例你需要修改程序清单中的步骤2。不过,因为某些原因,我建议你在真正编写程序之前反复测试。

注意,本文中的示例只是个演示程序,你最好在自己的程序中加入错误处理并同自己的标准相集成。其次,坦白地说,我测试POST请求的次数比GET请求的测试多得多。最重要的是,CGI接口因为具体的环境而会有所变化。当然,通常的CGI标准也差不多,而且这里用到的Apache也是最为普及的,但是你的系统可能对所需要的HTTP报头很敏感。比如说,示例没有采用Expires头,所以你在具体应用时可能会有变化。还有,我们采用的Perl 5.6也可能不适合你。


本文示例代码下载地址如下:routedata.cgi



小结

采用基于数据的路由技术,你可以定制事务处理过程,同时根据用户面向数据的行为或者客户跟踪cookie设计用户体验。这样做不但可以为Web事务日志和性能分析提供一个集中点,而且它还能让你让自己私有的服务同不安全的环境隔离。


责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134