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 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

Redis专题(九)——Redis管理工具

Redis专题(八) ——Redis管理工具 (原创内容,转载请注明来源,谢谢) 一、安全性 1、运行环境 Redis以简洁为美,其安全性...

3285
来自专栏冰霜之地

初探 Go 的编译命令执行过程

Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go 语言最最吸...

773
来自专栏开发技术

详细的最新版fastdfs单机版搭建

  目前项目是tomcat单机部署的,图片、视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片、视频的,这让我非常担忧;文件服务器的应用是必...

1481
来自专栏网络

深入理解php底层:php生命周期

文章来自:博客 http://blog.csdn.net/hguisu/article/details/7377520 1、PHP的运行模式: PHP两种运行模...

2298
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb14-事务,连接池(Java正在的全栈开发)

? 事务&连接池 一.事务 1. 事务介绍 什么是事务 事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元...

2534
来自专栏龙渊阁测试精英

Linux内存机制以及手动释放swap和内存

我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念...

1173
来自专栏FreeBuf

新手科普 | MySQL手工注入之基本注入流程

MySQL手工注入的基本步骤以及一些技巧的记录,当出现学习手工注入的时候,网上的文章参差不齐,导致很长一段时间对手工注入的理解一直处于一知半解的状态,特此记录本...

1787
来自专栏跟着阿笨一起玩NET

EntityFramework 连接数据库出错

本文转载:http://www.cnblogs.com/shuang121/archive/2012/03/19/2406121.html

751
来自专栏向治洪

Mpg123源代码详解

Mpg123与libmad一样,支持mpeg1,2,2.5音频解码。目前来看mpg123比libmad支持了网络播放功能。而且libmad基本上开源社区在200...

1807
来自专栏Golang语言社区

连接池

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。 好处 编辑 这种连接“汇集”起来的技术基于这样的一个事实:对于大多数应用程序...

3516

扫码关注云+社区