Chinaunix

标题: Dancer结合AnyEvent的使用 [打印本页]

作者: py    时间: 2012-06-27 09:11
标题: Dancer结合AnyEvent的使用
本帖最后由 py 于 2014-01-07 11:45 编辑

让代码解释一切。
  1. # lib/test.pm
  2. package test;
  3. use Dancer ':syntax';
  4. use AnyEvent;

  5. our $VERSION = '0.1';

  6. my $i = 1;
  7. our $w;
  8. $w = AnyEvent->timer(after => 1, interval => 1, cb => sub { $i++ });

  9. get '/' => sub {
  10.     return $i;
  11. };


  12. true;
复制代码
这样运行:
  1. plackup -p 80 -s Twiggy bin/app.pl
复制代码
这其实解决了很多问题(至少解决了我很多问题)。可以用事件触发更新,也可以把事件放到路径中,用户访问特定目录触发指定事件做后台处理。


个人认为Dancer缺乏先进性,不是一个纯事件框架,所以没法原生支持事件驱动,还要靠Twiggy这样的东西。
Mojolicious号称支持libev,但看了一下好像也不是原生支持。而且使用的人还是太少,不敢用。
其他的框架就更陈旧了。我觉得现在要是有个牛人用libev+libeio重写一个框架,就类似feersum那样就行。

期待Dancer2...


更新:2014年1月7日
修正错误:Mojolicious就是原生支持libev。
目前Mojolicious的使用者要多于Dancer,并且可以很负责任地说,Mojolicious远先进于Dancer。新开始的项目一定要用Mojolicious
作者: hitsubunnu    时间: 2012-06-27 10:43
本帖最后由 hitsubunnu 于 2012-06-27 10:46 编辑

期待一个web框架 变成一个事件驱动框架 你的想法好另类啊

你要的其实就是 nginx
作者: flw    时间: 2012-06-27 11:23
这个需求还是很实际的,至少我就用 POE+Dancer 搞定了一个大框架。
作者: hitsubunnu    时间: 2012-06-27 11:42
我看到的你们的要求是
  单线程+非阻塞+http请求 框架

这个不就是个nginx
作者: py    时间: 2012-06-27 13:08
nginx我用的不多,我不是专做web的,用过一次也只是为多个web服务和smtp做个简单的反向代理。
我知道nginx有个模块,使用以后可以写一些Perl的代码在里面。不知道你说的是不是这个方式?

和其他框架比,dancer其实没什么特别,但因为使用的人相对多,他就有很多插件,有现成的session可以用,配置文件里写一笔数据库就有了,data serialize也是写一笔配置文件的事,还有众多的模板可以选择,设置一切都是非常方便的。

在我理解,nginx应该放在最前面,后面放starman和Twiggy一类的东西运行Perl。而且我觉得nginx在访问小的情况下没什么突出优势。

我的情况是,已经开始用AnyEvent,已经用了很久dancer,把这两个放在一起就解决了我所有的需要。只是我期待dancer2能更“现代化”一些
作者: ttcn_cu    时间: 2012-06-27 19:12
希望有个牛人把几个组件的关系理一下
最近nginx热火朝天,网上有无数研究其源码的文章。
plackup dancer starman twiggy anyevent 等等混在一起,感觉很混乱啊。
作者: py    时间: 2012-06-27 21:57
回复 6# ttcn_cu

前4个的区别看这里,http://plackperl.org/  ,膏药国的人把Perl鼓捣的还是很明白的,他们的Perl水平明显强过咱们
AnyEvent和前面的4个没关系. 如果说有关系那也是内部实现,比如,“Twiggy is an AnyEvent based non-blocking (asynchronous) and lightweight PSGI web server.” 但从功能上说,AnyEvent做的事情和Twiggy做的事情是完全没关系的。
   
作者: ttcn_cu    时间: 2012-06-28 22:42
学习了。!
作者: yinyuemi    时间: 2012-06-28 23:39
收藏了
作者: huhuegg    时间: 2014-01-07 10:25
正好用到,非常有用~~~~~
万分感谢
作者: py    时间: 2014-01-07 11:38
第一次感谢挖坟人。。。时过境迁,又让我看到1年多以前的帖子
这帖子写的实在太愚蠢了。。。

这根本就称不上是“结合AnyEvent”,完全没有现实意义。建议大家都改用Mojolicious
作者: chenryn    时间: 2014-01-07 16:12
去年大会上说的要把anyevent和nginx-perl合到一起完成一个可扩展的全程非阻塞的webserver。不过然后说话的人咋就没动静了呢?
作者: dqw233    时间: 2014-01-08 07:52
回复 12# chenryn


    说话容易,做事难啊。。。
作者: chenryn    时间: 2014-01-12 21:10
今天想起来去nginx-perl的issue里看了下,原来两年前作者也曾经想过实现一个兼容AE的接口,但是因为低层差距太大而放弃掉了:
https://github.com/zzzcpan/nginx-perl/issues/6

作者: py    时间: 2014-01-13 07:05
chenryn 发表于 2014-01-07 16:12
去年大会上说的要把anyevent和nginx-perl合到一起完成一个可扩展的全程非阻塞的webserver。不过然后说话的人 ...


这有点痴人说梦了。章亦春当年都没做成这事,后来做出了ngx_lua。

如果能把nginx和EV结合在一起的确是好事,但如果不行,也不是什么大事。一个是后面的服务支持就行了,比如mojolicious/dancer,或是更直接的用feersum,feersum实际上就是高质量的完成了你说的在大会上吹牛的人要做的事。
作者: chenryn    时间: 2014-01-13 10:31
回复 15# py


agentzh确实试图过在nginx里加perl么?没听闻啊。
昨天在issue里留言来着,然后zzzpan回复说确实加不了EV,所以他的这个实现只能做为一个快速实现和验证。

所以结论是:专心用Feersum吧……
作者: py    时间: 2014-01-13 11:11
回复 16# chenryn

我去年的时候也有过此想法,就调查了一下,发现章亦春最开始是用perl开发nginx的模块,后来因为遇到困难并发现了lua的潜力,就做了ngx_lua。

最后发现要想用nginx+perl,就只有http://search.cpan.org/~zzz/Ngin ... dules/perl/Nginx.pm

我记得你还在slideshare上介绍过这个
   
作者: chenryn    时间: 2014-01-13 11:50
回复 17# py
应该是在我写过那个slide后大概半年的时间,~zzzcpan发的这个issue考虑和AE的兼容问题,但是发现跟nginx整个底层搞不到一块去,也就是说所有的异步模块都要用nginx的api写过,然后他把原先放在示例里的http和redis两个单拆出来做成了模块,随后这一年多基本他自己也就不怎么维护了。最后一次跟着nginx源码变版本号都是1.2.9的时候。现在nginx都1.5.0了吧……

   
作者: py    时间: 2014-01-13 13:19
回复 18# chenryn

我觉得Nginx-Perl本身还是个挺好的东西,但这么搞不是个事,谁有那么大精力维护这么个东西啊,而且是nginx每出一个新版本就得全从来一遍。
我去年测试过这个Nginx-Perl模块,效率也就是和feersum打一个平手。我大多数时候需要的不是效率高成什么样,目前这个mojo的效率就已经足够了。易用性对我来说更重要。feersum的话我看唐凤是用feersum(native)+Tatsumaki来做的
   
作者: chenryn    时间: 2014-01-13 13:53
回复 19# py


    嗯,我也测过,没有特别的性能优势。

其实关于perl的代码nginx这么多版本里好像都没变动过了,不晓得为毛~zzz选择自己维护一个完整的源码包而不是以一个patch存在或者甚至推回主支




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2