FF ASIO 异步消息网络框架

在前边 https://cloud.tencent.com/developer/article/1056482

我提到,针对前面使用boost asio 中遇到的问题,对asio进行封装,如下几个目标:

1. 创建socket、acceptor不再自己构造io_service,由于asio中的对象均要保存io_service的引用,

  若要手动构造,必须保证io_service晚于所有的asio对象(如socket、acceptor)释放,但是往往socket被逻辑层保存在某个内存深处,任意一个socket晚于    io_service释放,将会引起崩溃。

2. 编写分布式程序时,都是采用异步消息,但是asio 中对socket进行async_write不能保证线程安全,而且我们必须保证在单个socket上发送数据

  必须是顺序的。

3. io_service必须绑定线程才能运行,而每个asio socket都需要io_service,所以经常要手动为io_service创建线程,但是经过测试表明,网络io分配的线程配置

  2-4个效率最佳,在增加线程并不能增大吞吐量,这是由于asio采用全异步模式。所以我们只需要开启两个专门的线程给asio的io_service用即可,

  省了在关心线程的分配。

4. 在编写分布式程序中,变的往往只是逻辑层,网络框架、消息协议基本不怎么变化,所以网络框架必须能够保证逻辑层的接口足够灵活。在基于消息模式

  通讯的框架下,每个程序需要单独定制自己的消息派发策略。

5. 如果新增加支持的消息协议,必须保证无需重写框架,而且保证原来的消息派发策略仍然有效。

目前ff_lib已经能够很好的支持以上几点,当然,消息解析并没有来得及优化,目前仍然处于demo版本。

其类关系如图:

其实现参见:

http://code.google.com/p/redrabbit/source/browse/trunk/lib

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

缓存穿透,缓存击穿,缓存雪崩解决方案分析

设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。

1123
来自专栏杨建荣的学习笔记

MySQL的double write和Oracle对比学习(r4笔记第47天)

之前有网友希望我对mysql的double write和oracle能够做一个对比,其实这种对比方式挺好,能够触类旁通,举一反三。不过限于本人水平有限,欢迎拍砖...

2825
来自专栏北京马哥教育

小白也能看懂的简单明了kafka原理解析

? 介绍 ? 分布式消息系统kafka的提供了一个生产者、缓冲区、消费者的模型 ? broker:中间的kafka cluster,存储消息,是由多个se...

3396
来自专栏Java技术交流群809340374

阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案

分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服...

20
来自专栏我的博客

MYSQL主从同步

1、解决问题 数据分布不同节点、负载均衡、读写分离、容灾备份、高可用应用、故障切换等 2、同步原理 Master将操作记录到bin-log salve的一个线程...

3469
来自专栏大闲人柴毛毛

缓存世界中的三大问题及解决方案

目前的IO设备远不能满足互联网应用海量的读写请求。于是便出现了缓存,利用内存的高速读写性能来应付海量的查询请求。然而内存资源非常宝贵,将全量数据存储在内存中显...

2675
来自专栏编程

浅析同步异步阻塞非阻塞

? 先说说这几个词的意思 同步:同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。 异步:异步是不需要等待被依赖...

1808
来自专栏风中追风

为什么redis 是单线程的?

在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少

35711
来自专栏乐沙弥的世界

Percona XtraDB Cluster集群状态监控(PXC 5.7)

每个节点可以有不同的集群视图。没有集中化监视节点。为了追踪问题的来源,您必须独立监控每个节点。

590
来自专栏不止思考

缓存服务的更新策略有哪些?

一般在项目中,最消耗性能的地方就是后端服务的数据库了。而数据库的读写频率常常都是不均匀分布的,大多情况是读多写少,并且读操作(select)还会有一些复杂的判断...

732

扫描关注云+社区