CAF(C++ Actor Framework)介绍
来源:互联网 发布:注册网站域名 编辑:程序博客网 时间:2024/04/29 05:23
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有关的消息都从这里开始.
2. 模式匹配.
模式匹配是caf中1个10分重要的特性, 它直接致使了caf基于lambda表达式的消息回调列表成为可能. caf为此自己内建了DSL语言来达成这个目的.
下面效果就是来自模式匹配.
需要说明的是, 上面的例子中actorx函数是立即返回的, 也就是说里面的become也是立即返回的, 好像把两个消息处理回调放在actorx函数内部.当有消息到来时, 经模式匹配后就会调用恰当的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.
上面的remote_actor则用于连上publish的actor, 这样散布在不同机器上的actor就能够相互通讯了. 这个功能似乎仅限于此了. 从实际的代码运行来看. 作为服务器的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/
- CAF(C++ Actor Framework)介绍
- CAF(C++ Actor Framework)介绍
- caf
- Actor Framework for Windows Azure
- Actor模型介绍
- Actor示例简单介绍
- c++actor模型库Theron
- 【Akka笔记】0. Actor介绍
- Actor事件处理框架介绍
- Actor
- Actor
- Actor
- Actor
- FrameWork介绍
- caf录音
- Actor Platform 平台搭建(一) -平台介绍-Docker搭建方法
- .NET Framework 介绍
- Portal Framework介绍
- 机器学习中的相似性度量
- 07-图6 旅游规划 (25分)
- workflow status diagram打不开问题解决
- 2138转化成十六进制
- 十进制转化为二进制和十六进制
- CAF(C++ Actor Framework)介绍
- 《战拖有术》读书笔记(XII)
- nc 调用后台接口 生成单据编码单据编号
- Fiddler实现手机的抓包
- 《JAVA与模式》之门面模式
- 十进制到二进制
- SwitchButton 开关按钮 的多种实现方式 (附源码DEMO)
- 把230转换成16进制
- 十进制到二进制