1. 描写.
caf是1个actor模型的开源编程框架, 强c++11风格的实现, 早先的名字其实不叫CAF, 而是CPPA. 改名的时间产生在版本(0.9 >> 0.10). 而最近的版本
是0.11.2, 从文档上看, caf的实现参考了akka和erlang. 默许的actor调度是基于线程池方式, 而不是协程. 因此更像akka. 由于caf是基于c++的实现,
在性能上可能更占优势. 更让人没法谢绝的是在caf中大量使用了lambda表达式来替换通常散落1地的回调函数. 视觉上非常直观, 开发时可以少
死很多脑细胞. 固然这个项目现在还非常新, 网络io部份也比较瘦, 养肥了再用到生产环境中不迟.
2. caf的主要特性
1. actor
actor分为两种, 无类型actor和强类型actor. actor的创建非常简单, 简单到不能再简单了, 以下面的例子. 将1个自由函数作为参数传递spawn,
1个actor就生成了, 在下面的例子中actorx内部持有1个actor的句柄self. 所有与这个actor有关的消息都从这里开始.
模式匹配是caf中1个10分重要的特性, 它直接致使了caf基于lambda表达式的消息回调列表成为可能. caf为此自己内建了DSL语言来达成这个目的.
下面效果就是来自模式匹配.
当有消息到来时, 经模式匹配后就会调用恰当的lambda表达式. 不用再到处找回调了.
3. 消息发送.
消息发送可以分为以下几种:
a). 发完就忘, 就像上面anon_send.
b). 同步发送, 等待响应. 等待是异步的, 相当于只是期待1个响应.
c). 同步发送, 等待响应, 超时后收到1个系统消息.
d). 同步发送, 同步等待. 适用阻塞的actor api.
e). 消息延迟发送, 这1点比akka做得漂亮很多.
f). 消息前转, forward.
g). 消息优先级选择.
4. 消息接收.
主要有两种特性:
a). 等待超时, 超时后收到1个系统消息.
b). 消息跳过, skip.
5. 行动(behavior)
如果actor的消息流程是1个有限状态机, 那行动就是用来控制流程的标志. behavior是1个栈, 通过keep_behavior压栈, unbecome恢复.
6. 链接(link)
两个(或多个)actor可以相互link在1起, 生死相干. 1起活着或默许1起死去.
当其中1个actor异常退出时, 另外一个(多是多个)会收到1个"exit_msg"消息, 如果不捕获这个消息. 默许的行动就是当前actor也退出.
如果选择捕获, 那就自己定义行动.
7. 监视(monitor)
1个actor可选择监视另外一个或另几个actor. 乃至可以同时监视同1个actor屡次. 当被监视的actor退出时, 监视者就会收到1个"down_msg".
监视者仅仅是收到这个消息而已. 不会有其它对自己的响应. 需自己定义行动.
8. 在网络上发布1个actor.
这个功能貌似还非常骨感, 其做法是调用pubish函数将1个actor绑定在某个本地端口上, 作为服务器向外提供服务. 以下面的端口8080, 端口
后面还有1个默许的字符串参数, 允许指定本地服务ip.
行来看. 作为服务器的actor只能收到客户端发送的业务消息, 包括连接到来, 断开等事件都无消息通知. 并且双方之间的通讯似乎还遵守某种协
议(自己写1个socket, 向服务器发送消息时, 它无动于中).
9. 代理(broker)
broker的功能要比publish更强. 有点类似于我的前1篇博客中介绍的akka.io.
比akka有1点好的地方在是, broker提供了有限的手动控制消息缓冲区的api.
相信过不了多久. 用broker作服务器就会成为不错的选择.
10. 组通讯.
组可以分为匿名组, 本地组和远程组. 前两个用于进程内通讯, 远程组则可能合适1些散布式的利用场景. 1个actor可以加入或选择离开组.
3. 编译.
项目地址是: https://github.com/actor-framework/actor-framework
签出: git clone https://github.com/actor-framework/actor-framework.git
编译使用的是cmake, 进程很简单, 没甚么可说的. 编译完以后, 会生成两个库, libcaf_core.so和libcaf_io.so. 如果你不打算使用网络相干的功
能, 只要链接上libcaf_core就能够了.
4. 文档
我翻译了1个libcaf的手册, 上传到百度文库了. 草稿, 无任何保证质量. 以下:
http://wenku.baidu.com/view/7e2b6be16529647d2728528e.html
原文地址: http://www.actor-framework.org/manual/