级联多个应用
浏览:3333次 出处信息
Conditional 的中间件和 URLMap 的应用有共同点:它们都是 PSGI 应用,选择执行应用时要么通过 PSGI 取得 PSGI 的应用或者通过中间件来调度到应用 。这是 PSGI 应用程序和中间件最美的地方,今天的要谈一个其它例子。级联多个应用,级联是非常有用的,如果你有数个应用,需要按一定的顺序运行,这尝试着直到返回正常的响应,这有时也被称为链式设计,在一些 Web 应用中常常用到。象 mod_perl 的处理
级联应用
Plack::App::Cascade 可以让你合成多个应用以一定的顺序来运行,直到出现 non-404 responses 的返回.
use Plack::App::Cascade; use Plack::App::File; use Plack::App::URLMap; my @paths = qw( /home/www/static /virtualhost/example.com/htdocs/static /users/miyagawa/public_html/images ); my $app = Plack::App::Cascade->new; for my $path (@paths) { my $file = Plack::App::File->new(root => $path); $app->add($file); } my $map = Plack::App::URLMap->new; $map->mount("/static" => $app); $map->to_app;
这个应用映射 /static 使用 URLMap.然后全部的请求会试着从 @paths 这三个目录中使用 App::File 应用来找文件,这可能对你想从多个目录多个目录级联起来取文件非常有用。
级联不同的应用
use CatalystApp; CatalystApp->setup_engine('PSGI'); my $app1 = sub { CatalystApp->run(@_) }; use CGI::Application::PSGI; use CGIApp; my $app2 = sub { my $app = CGIApp->new({ QUERY => CGI::PSGI->new($_[0]), }); CGI::Application::PSGI->run($app); }; use Plack::App::Cascade; Plack::App::Cascade->new(apps => [ $app1, $app2 ])->to_app;
这会建二个应用,一个 Catalyst 和一个 CGI::Application 的。然后按顺序运行这二个应用。假设在你的 URL 的结构中有一个 /what/ever.cat 是通过 Catalyst 的应用来服务和 /what/ever.cgiapp 是使用 CGI::Application 的 app.
这个是不是听起来非常疯狂,我想这是最好使用 URLMap 来映射两个不同的路径给应用,但如果你真的想级联,可能这是一个解决方法:)
这是我的译文,原文地址:http://advent.plackperl.org/2009/12/day-19-cascade-multiple-applications.html
建议继续学习:
- 基于PECL OAuth打造微博应用 (阅读:4811)
- 微博应用那点事 (阅读:3286)
- 让APP简约而不简单 (阅读:3265)
- 手机应用创意过滤与失败经验谈 (阅读:2953)
- 2011年手机产品设计趋势(3):硬件与应用 (阅读:2474)
- 用户体验案例研究:设计微博应用 (阅读:2448)
- 基础体验决定上层应用 (阅读:2425)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
文章信息
- 作者:扶凯 来源: 扶凯
- 标签: 应用 级联
- 发布时间:2011-08-19 23:11:59
建议继续学习
近3天十大热文
-
[899] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[55] Innodb分表太多或者表分区太多,会导致内 -
[53] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 全站换域名时利用nginx和javascri -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储 -
[52] 用 Jquery 模拟 select -
[51] 分享一个JQUERY颜色选择插件
