Chinaunix

标题: 使用魔咒 ( Mojolicious ) 写非阻塞的应用: Part 1 中译版 [打印本页]

作者: laputa73    时间: 2013-11-05 15:22
写回调有些头疼.
尤其是需要多次查询的时候.
coro可以配合mojo用么?
作者: iakuf    时间: 2013-11-05 22:18
本帖最后由 iakuf 于 2013-11-06 13:36 编辑

回复 2# laputa73
多次查询用 Mojo::IOLoop::Delay 一次包进去


   
作者: py    时间: 2013-11-06 06:51
支持~
作者: py    时间: 2013-11-06 07:04
laputa73 发表于 2013-11-05 15:22
写回调有些头疼.
尤其是需要多次查询的时候.
coro可以配合mojo用么?

可以,但稍微麻烦。直接用的话是肯定不可以的,需要做额外工作。

建议用Mojo::IOLoop:elay来完成,看一下这部分的例子你会发现在一个web框架中使用非阻塞,这个东西比coro好用。(我是回调狂魔)

我是这么想的,能用EV把问题解决了就不扯上coro。用coro多是为了它的方便的协程功能,这部分用事件回调就不好,代码多好多复杂好多,用coro几行就完事。
作者: laputa73    时间: 2013-11-06 09:12
本帖最后由 laputa73 于 2013-11-06 09:24 编辑

学习.
看了IOLOOP的例子,确实很适合做这种顺序的回调处理.
另外看到这篇,介绍异步的回调匿名函数的处理.
http://www.php-oa.com/2013/09/03/mojolicious-async-technique.html
作者: stanley_tam    时间: 2013-11-06 10:51
本帖最后由 stanley_tam 于 2013-11-06 10:57 编辑

说实话很想学perl的mojo,但是资料啥的看不懂,连在apatche服务器配置啥的都头大. 可能跟自己太笨有关{:3_199:}
于是就转学python的django了。。。要是mojo有django book那样通俗易懂的文档就好了。
作者: py    时间: 2013-11-06 12:42
stanley_tam 发表于 2013-11-06 10:51
说实话很想学perl的mojo,但是资料啥的看不懂,连在apatche服务器配置啥的都头大. 可能跟自己太笨有关{:3_1 ...


任何技术的学习都有个学习门槛。mojo不是没有好的学习资料,资料非常详细,全在那呢,只是你不能全靠中文资料。如果你的学习必须要中文资料,那mojo的确不是个好选择。
作者: iakuf    时间: 2013-11-06 13:38
本帖最后由 iakuf 于 2013-11-06 13:39 编辑

回复 7# stanley_tam

学 mojo 不用配置 apache ,直接 morbo app.pl 就行了

http://mojo.php-oa.com/perldoc

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3779170


   
作者: stanley_tam    时间: 2013-11-06 14:27
额。冤枉啊。。django book看的就是英文的,几天就可以弄点东西出来,弄出来东西才有动力啊。
mojo的中文入门http://cpan.php-oa.com/perldoc/Mojolicious/Lite   就算是中文的也看不太懂,更像是一个提纲。感觉有很多东西没有说。{:3_196:}
回复 8# py


   
作者: stanley_tam    时间: 2013-11-06 14:28
额,production的应用也这么干? 我以为那个只是一个开发用的server
回复 9# iakuf


   
作者: stanley_tam    时间: 2013-11-06 15:05
  1. http://mojocasts.com/e1
复制代码
这上面的视频很酷啊,谢谢分享{:3_182:}  
作者: iakuf    时间: 2013-11-06 15:17
回复 11# stanley_tam

生产环境
  1. hypnotoad script/myapp
复制代码

作者: iakuf    时间: 2013-11-06 15:17
回复 10# stanley_tam

http://cpan.php-oa.com/perldoc/ 这个目录下所有的分类都认真看看.


   
作者: seufy88    时间: 2013-11-06 19:58
感谢LZ对PERL的分享
非常不错.我正打算进入MOJO的世界.
作者: py    时间: 2013-11-07 06:57
stanley_tam 发表于 2013-11-06 14:27
额。冤枉啊。。django book看的就是英文的,几天就可以弄点东西出来,弄出来东西才有动力啊。
mojo的中文入 ...


那你说说文档上缺少什么?我来告诉你文档位置。

我不鼓励看中文文档,http://mojolicio.us/perldoc

另外,这种技术人员写的文档有时候是难理解,水平越高的技术人员写的文档就越会默认你知道越多东西,mojo的作者算是讲的很细了。
作者: stanley_tam    时间: 2013-11-07 12:14
谢谢,先看看,有问题找你。{:3_193:}
大神是不是都直接看源码的。。。

PS。 大神起得很早啊
回复 16# py

作者: py    时间: 2013-11-07 12:24
stanley_tam 发表于 2013-11-07 12:14
谢谢,先看看,有问题找你。
大神是不是都直接看源码的。。。

没看过mojolicious的源码,我才开始用不久,先用熟了再说。(不是神)
我已经把我这边大部分的生产系统从dancer搬到mojolicious了。极好用。

ps. 我起的很晚,只是有时差.
作者: iakuf    时间: 2013-11-07 14:47
回复 18# py

py 还不在国内啊

   
作者: pitonas    时间: 2013-11-07 21:37
额,那个只是一个应用?
作者: pitonas    时间: 2013-11-07 21:41
本帖最后由 pitonas 于 2013-11-07 15:20 编辑

a a
作者: py    时间: 2013-11-08 09:19
回复 19# iakuf

恩,不过春节都会回国。
有兴趣跳槽的话可以来我这儿:)

我昨天看到你发feersum,又仔细看了看feersum。有如下疑问:
1. 具体是什么原因让feersum的效率比其他“同类产品”好这么多?
我在说同类产品的时候指的是:AnyEvent::HTTPD,Twiggy,morbo和hypnotoad
从测试上看AnyEvent::HTTPD < Twiggy < feersum(psgi) < feersum(native)。morbo和hypnotoad我没测试过
AnyEvent::HTTPD 和 Twiggy是anyevent写的,feersum,morbo和hypnotoad是直接用的EV。这不应该是造成效率差这么多的主要原因。同样用EV,我觉得这HTTP server的写法也起了决定作用,不然feersum的psgi/native也不会差这么多。
你觉得是什么原因呢?

2. 我是不是可以认为,小日本的PSGI是个没设计完善的东西?
至少feersum(native)方式就是对PSGI结构的效率上的一个改进。现在各个http server都说支持psgi,支持 Plack。但实际上在不支持psgi的情况下工作的更好。这样一来,psgi就没什么意义了。

3. 另外我一直觉得starman/starlet这种非事件的http server是个很没前途的东西。发展下去瓶颈明显。小日本喜欢弄个helloworld做测试,得出个满意结果,但实际上架上实际应用和数据库整个的东西就成了臭狗屎了。(这一点我是测试了的)
我看现在小日本一部分人还死守着starman这类的,也有不少已经走异步事件了。

4. 我觉得效率是一方面。大多数web项目还是更重视开发速度,功能,稳定。这样一来,对于大的web项目,Mojo这样的连带着web框架和web server的解决方案就显得格外完美了。你觉得feersum更适合被用在什么场合?

有机会的话可以面对面交流就更好了。
   
作者: 兰花仙子    时间: 2013-11-08 09:46
感谢扶凯的分享。
我一直对非阻塞这种说话有疑惑,因为异步并不等于非阻塞。
epoll都是阻塞的吧,从内核拷贝数据到应用程序是阻塞的。
事件触发的编程,或叫异步编程,只是一种IO事件通知方式。
真正的IO处理阻不阻塞,应该是另外一回事。
作者: py    时间: 2013-11-08 11:50
兰花仙子 发表于 2013-11-08 09:46
感谢扶凯的分享。
我一直对非阻塞这种说话有疑惑,因为异步并不等于非阻塞。
epoll都是阻塞的吧,从内核拷 ...


我是这样理解的。
我觉得“非阻塞就是异步”。在说这种网络程序的时候,因为大部分时间花在内核等待数据上了,所以在说“非阻塞”或是“异步”的时候,说的就是这段时间。等数据完全到达内核了,从内核中拷贝数据到应用程序的过程,在mojo或是feerum或是上面提到的这些web server上,都是阻塞的。除非用“非阻塞IO”,就是libaio,对应的IO::AIO。node.js就是用的libaio来处理IO的。好像现在的web server多是用EV做事件实现非阻塞,因为这样就解决了最大部分的“等待时间”开销。
作者: py    时间: 2013-11-08 12:33
回复 24# iakuf

感谢扶凯解惑。

我确是首都市民。回去了联系你。

已经给你站内信息了。
   
作者: chenryn    时间: 2013-11-08 23:54
板凳围观本页内容……
作者: yaoliwei    时间: 2013-12-26 17:23
高手切磋,有意思。
我们围观的也能学到东西。:wink:




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