免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3580 | 回复: 3
打印 上一主题 下一主题

【总结】如何把阻塞的Perl模块重新实现成非阻塞模块 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-22 06:26 |只看该作者 |倒序浏览
前几周看了一下Mojo::Pg这个模块,总结了一下把阻塞的Perl模块重新实现成非阻塞模块的方法。

Mojo::Pg这个模块算是Mojolicious作者给大家写了一个很好的例子。仔细看能学到很多东西。

在用于进行网络连接的Perl的模块中,我按照网络连接是否阻塞把他们分成三种。
1. 很多老一些的模块都是阻塞的,比如Net::FTP,DBD::Oracle, BerkeleyDB
对于第一类模块,要改成非阻塞的,在不改动原有代码的情况下就只能通过fork一类的方法实现了。另外的办法就是整个用
AnyEvent::Socket/Coro::Socket,Coro::Handle等模块从写。工程比较大。

2. 还有一些比较老的模块,他们虽然是阻塞的,但提供了非阻塞的参数,比如DBD::mysql,DBD::Pg,Net::LDAP等等。
主要说这部分。这一类模块要改成非阻塞相对于前一类要容易的多,只要善加利用阻塞参数,设计和封装一个新的API就可以了。但说实话我对于如何设计这个东西完全没头绪也没有思考过,如果要我做,我肯定是去看一些已有的实现(比如AnyEvent::DBI::MySQL),然后按葫芦画瓢。
最近Mojolicious作者因为MongoDB 文档的原因准备放弃Mango模块的维护权,转而开始了对PostgreSQL的支持,写了Mojo::Pg模块。看这个模块的代码实现能够很好的学习Mojo实现的非阻塞的设计,并且可以重用很多作者的代码。Mojo::MySQL就是个很好的例子,它复制了几乎所有Mojo::Pg的代码实现了一个MySQL的异步数据库连接。有兴趣的朋友可以看看异步实现的部分https://metacpan.org/source/SRI/ ... Pg/Database.pm#L132
Mojolicious作者写的文档个人觉得还是不够好的,文档结构组织的不好,给最终用户使用的部分说的比较详细,但涉及到和AnyEvent一个级别的模块,比如Mojo::IOLoop,文档说明就太不够了,远不如AnyEvent模块文档介绍的那么详细,这次作者写的Mojo::Pg模块是个非常好的例子,可以很好的理解异步实现的方法。

3. 一些新的模块是非阻塞的,比如AnyEvent::HTTP,AnyEvent::DBI::MySQL,Mojo::Mysql,Mojo::Pg等等
上面举的这几个例子都是比较完美实现异步通讯的,但也有用fork类方法实现的,在挑选模块的时候最好是看清文档,比如AnyEvent::DBI模块就是fork实现的。

论坛徽章:
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
2 [报告]
发表于 2014-10-22 07:21 |只看该作者
学习了。也去翻翻源码看。

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
3 [报告]
发表于 2014-10-22 09:38 |只看该作者
总结的不错

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
4 [报告]
发表于 2014-10-22 11:19 |只看该作者
谢谢楼主。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP