免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10420 | 回复: 24

mojolicious自带的不同server的问题(morbo和hypnotoad) [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 09:26 |显示全部楼层
这几天被一些问题缠绕,前天下定决心花了,怠工一下午,把mojolicious的主要文档全看了一遍,然后把现有的一个项目从dancer转到了mojolicious。

看来我得收回以前的一个反mojo贴了。mojolicious,确实好。优点我在之后的帖子里再阐述:)

我主要是想问问那些在生产环境用mojolicious的人,一般会选择什么server?

问题1. morbo和hypnotoad从介绍上看是完全一样的,难道唯一的区别就是hypnotoad是Prefork的。。?

问题2. 我还没来得及看mojo的代码。只从目前测试的结果看。Feersum和Twiggy是anyevent/EV写的,用这两个东西的时候plackup启动应用,如果代码中有阻塞的等待,比如$cv->recv,比如$coro->join。这个时候server会报错退出,提示阻塞了整个进程。这是由于Twiggy的进程就是$cv->recv来结束的,如果其中再有阻塞肯定会报错。
我看Mojo::Server::Hypnotoad和Mojo::Server::Morbo的文档介绍,这两个都是EV(需要安装了EV)写的non-blocking server,为什么我在mojolicious框架里就可以做阻塞等待这种操作recv,join?


TIA

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2013-10-18 11:44 |显示全部楼层
问题1  感觉就是这样的,后端http模块都是相同的,感觉hypnotoad/morbo更像一个启动sh
  mojo配twiggy会有问题.
问题2  也是我一直困惑的.基于事件的app server和app之间代码的透明性问题.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 12:53 |显示全部楼层
回复 2# laputa73

我以前试图用Feersum启动mojo,访问有时候会报错。
我觉得用mojo就完全不再考虑使用twiggy了,hypnotoad已经足够好了,况且如果不是不得已,半个膏药国模块我都不想用的。

另外一提,据我目前了解,mojo必须要用它自己的server启动才能支持他所有的real-time feature。用PSGI server就不行了。所以starman/starlet一类的就不考虑了。也让PSGI去死吧。
   

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
发表于 2013-10-18 17:04 |显示全部楼层
本帖最后由 iakuf 于 2013-10-18 17:34 编辑

回复 1# py


   
问题1. morbo和hypnotoad从介绍上看是完全一样的,难道唯一的区别就是hypnotoad是Prefork的。。?


morbo 是单进程,默认用来做测试用, 你可以一边修改代码,他会自动 reload 加载你的修改. 只要你的修改的代码是在 lib templates 目录下. Dancer 的测试用 Web 服务器也是这样,但是程序本身有大的错会自动退出.但 Morbo 不会.
hypnotoad 是作者为 Linux 和 Unix 优化过的多进程的 prefork 的 web 服务器.全事件支持, 并且有着非常高的性能.

问题2. 我还没来得及看mojo的代码。只从目前测试的结果看。Feersum和Twiggy是anyevent/EV写的,用这两个东西的时候plackup启动应用,如果代码中有阻塞的等待,比如$cv->recv,比如$coro->join。这个时候server会报错退出,提示阻塞了整个进程。这是由于Twiggy的进程就是$cv->recv来结束的,如果其中再有阻塞肯定会报错。
我看Mojo::Server::Hypnotoad和Mojo::Server::Morbo的文档介绍,这两个都是EV(需要安装了EV)写的non-blocking server,为什么我在mojolicious框架里就可以做阻塞等待这种操作recv,join?


正常的基于事件的程序, 是希望整个 web 服务器支持事件的,不然就是单个进程搞这些事情, 直接 recv 事件就退出一个条件了.所以如果想 plackup 启动这些程序没有问题,需要指定后端服务器为 Feersum 和 Twiggy. 这时我想就不会出错了.
在我的应用中,如果是使用 Feersum 的时候,我会使用它的原生模式.因为加了plack 性能就会下降不少. 在 Feersum 原生模式有着 nginx 的性能.
另外,还有个理解上的问题, 在你的事件程序中, 你需要知道,你的整个 Web server ,象 Feersum 本身就是相当一个大的事件集.它在整个程序的最外层有一个一直在等永远不可能接收到的 recv (类似 EV::run).
所以,在使用基于事件的 Web server 的程序中,你要给 recv 理解成 run (多个 recv 当然就不是这样), 是用于让事件循环开始的条件. 如果使用 EV ,你可以给他理解成 EV::run. 这时, 象 AnyEvent::HTTP 之类, 都不在需要使用 recv 让这个事件开始跑起来,只需要正常的写就好了. 不要考虑 AE 中的 cv 这步了.


论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-18 20:43 |显示全部楼层
iakuf 发表于 2013-10-18 17:04
回复 1# py

另外,还有个理解上的问题, 在你的事件程序中, 你需要知道,你的整个 Web server ,象 Feersum 本身就是相当一个大的事件集.它在整个程序的最外层有一个一直在等永远不可能接收到的 recv (类似 EV::run).
所以,在使用基于事件的 Web server 的程序中,你要给 recv 理解成 run (多个 recv 当然就不是这样), 是用于让事件循环开始的条件. 如果使用 EV ,你可以给他理解成 EV::run. 这时, 象 AnyEvent::HTTP 之类, 都不在需要使用 recv 让这个事件开始跑起来,只需要正常的写就好了. 不要考虑 AE 中的 cv 这步了.


解释的非常清楚。谢谢。
我刚才在做mojolicious的异步数据库的时候才明白。在任何事件框架里做“recv,join”操作都是错误的,局部的异步没有意义。整个web server就有一个recv,所有事件共用这一个就好了。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2013-10-18 22:09 |显示全部楼层
LZ 我想学习多线程之类,感觉这方面的模块很多,自己看了走了很多弯路。求指导{:3_199:}
例如:开始学什么,然后进阶学什么。。
十分感谢

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
发表于 2013-10-18 23:59 |显示全部楼层
本帖最后由 iakuf 于 2013-10-19 00:04 编辑

回复 5# py

发现 Mojo 的好处啦吧.除了本身在不使用异步的时候, 功能和完整性上 Mojo 就比 Dancer 强很多.如果加上整个 Web Server 上的异步,可以让程序的性能提升太多太多.
只是想要完全异步,对写程序的人,有一定的要求... 另外, Mojo 可以直接使用 AnyEvent 的所有东西(有 EV 在 Mojo 中事件驱动就会变成 ev),这个也让这个框架能力强很多.
   

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
发表于 2013-10-19 00:04 |显示全部楼层
回复 6# mcshell
放弃这个想法

   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2013-10-19 01:02 |显示全部楼层
本帖最后由 mcshell 于 2013-10-19 01:05 编辑

回复 8# iakuf


    凯哥,,有什么好的建议?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-10-19 06:52 |显示全部楼层
mcshell 发表于 2013-10-18 22:09
LZ 我想学习多线程之类,感觉这方面的模块很多,自己看了走了很多弯路。求指导
例如:开始学什么 ...


多线程的可用之处太少,偶尔出现也能用多进程代替。网络应用目前比较流行非阻塞,这也非常符合网络应用的需求。多线程在网络应用中都是不合理的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP