注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

yu.chen的博客

坚持到底就是胜利

 
 
 

日志

 
 
关于我

喜欢数学, 喜欢编程,喜欢开发系统,喜欢逆向工程,喜欢欣赏开源前辈的代码

网易考拉推荐

学习源码文件rabbit_heartbeat.erl  

2012-05-26 13:19:29|  分类: erlang |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
篇幅只有三页,共149行代码。别看它很短,但是算是一份erlang源码的大餐。回调函数中使用回调函数,代码的篇幅被压缩到最小。如果自己去写相同功能的代码,不看它的实现方式,长度至少3倍以上,理由在下面给出了。

这个模块的功能是给每个socket增加一对状态监听器,一个用于接收数据的监听,一个用于发送数据的监视,当超过阀值没有接收到数据后,结束process,返回。另外小功能是允许停止监听,重新开始监听。

这个源码文件没有借助于otp去实现这个功能,而是调用了proc_link手动去创建process,理由就是两个process很相似,大量的代码是类似的,使用otp去实现,callback函数就无法实现共享,几乎完全相同的逻辑代码需要写两份,以后也需要维护两份。proc_link相对于otp的gen_server的优点就是callback函数是作为参数传入的,所以callback函数可以被多个process共享。

还有一处奇怪的代码在函数heartbeater/2中,居然使用了两层的套嵌的receive语句,之前从来没有看到过,作者用它来实现暂停后重新启动的功能。

在erlang中看源码,就像破案,看完这份源码后,打印稿上已经是一堆的红线。连线是用于回朔变量使用时与变量的赋值时。开始看文件时的很多假设到看完后证明都是错的。
  评论这张
 
阅读(66)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018