SOFABolt 用户手册

蚂蚁通信框架实践

SOFABolt 是蚂蚁金融服务集团开发的一套基于 Netty 实现的网络通信框架。

为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上,而不是过多的纠结于网络底层 NIO 的实现以及处理难以调试的网络问题,Netty 应运而生。
为了让中间件开发者能将更多的精力放在产品功能特性实现上,而不是重复地一遍遍制造通信框架的轮子,SOFABolt 应运而生。

SOFABolt的基础功能:

  • 基础通信功能 ( remoting-core )
    基于 Netty 高效的网络 IO 与线程模型运用
    连接管理 (无锁建连,定时断链,自动重连)
    基础通信模型 ( oneway,sync,future,callback )
    超时控制
    批量解包与批量提交处理器
    心跳与 IDLE 事件处理
  • 协议框架 ( protocol-skeleton )
    命令与命令处理器
    编解码处理器
    心跳触发器
  • 私有协议定制实现 - RPC 通信协议 ( protocol-implementation )
    RPC 通信协议的设计
    灵活的反序列化时机控制
    请求处理超时 FailFast 机制
    用户请求处理器 ( UserProcessor )
    双工通信

基础功能实现

1.1 实现用户请求处理器 (UserProcessor)
我们提供了两种用户请求处理器,同步请求处理器(SyncUserProcessor) 与 异步请求处理器(AsyncUserProcessor)。 二者的区别在于,前者需要在当前处理线程以return返回值的形式返回处理结果;而后者,有一个== AsyncContext 存根==,可以在当前线程,也可以在异步线程,调用 sendResponse 方法返回处理结果。

1.2 实现连接事件处理器 (ConnectionEventProcessor)
我们提供了两种事件监听,建连事件(ConnectionEventType.CONNECT)与断连事件(ConnectionEventType.CLOSE),用户可以创建自己的事件处理器,并注册到客户端或者服务端。客户端与服务端,都可以监听到各自的建连与断连事件。

处理连接建立事件
处理连接断开事件
1.3 客户端与服务端初始化 (RpcClient,RpcServer)
我们提供了一个 RpcClient 与 RpcServer,经过简单的必要功能初始化,或者功能开关,即可使用。一个最简单的例子如下:

客户端初始化示例
服务端初始化示例

用法1

将 SOFABolt 用作一个远程通信框架,使用者可以不用关心如何实现一个私有协议的细节,直接使用我们内置的 RPC 通信协议。可以非常简单的启动客户端与服务端,同时注册一个用户请求处理器,即可完成远程调用。同时,像连接管理、心跳等基础功能特性都默认可以使用。 当前支持的调用类型如下图所示:

示例 Demo

四种通信模型:

1.Oneway 调用

当前线程发起调用后,不关心调用结果,不做超时控制,只要请求已经发出,就完成本次调用。注意 Oneway 调用不保证成功,而且发起方无法知道调用结果。因此通常用于可以重试,或者定时通知类的场景,调用过程是有可能因为网络问题,机器故障等原因,导致请求失败。业务场景需要能接受这样的异常场景,才可以使用。

  1. Sync 同步调用

当前线程发起调用后,需要在指定的超时时间内,等到响应结果,才能完成本次调用。如果超时时间内没有得到结果,那么会抛出超时异常。这种调用模式最常用。注意要根据对端的处理能力,合理设置超时时间。

  1. Future调用

当前线程发起调用,得到一个 RpcResponseFuture 对象,当前线程可以继续执行下一次调用。可以在任意时刻,使用 RpcResponseFuture 对象的 get() 方法来获取结果,如果响应已经回来,此时就马上得到结果;如果响应没有回来,则会阻塞住当前线程,直到响应回来,或者超时时间到。

  1. Callback异步调用

当前线程发起调用,则本次调用马上结束,可以马上执行下一次调用。发起调用时需要注册一个回调,该回调需要分配一个异步线程池。待响应回来后,会在回调的异步线程池,来执行回调逻辑。

sofa-bolt(网络通信框架)相关推荐

  1. SOFA BOLT源码解析之设计要点-线程模型

    1 设计要点解析 1.1  线程模型 此部分内容主要介绍蚂蚁为什么选择Netty4作为基础网络编程框架,来源于蚂蚁技术团队发布的一篇文章: 文章名称为:蚂蚁通信框架实践: 链接地址为:https:// ...

  2. 蚂蚁集团网络通信框架 SOFABolt 功能介绍及协议框架解析 | 开源

    简介:开源网络通信框架 SOFABolt 首次线上直播文字回顾. ,有趣实用的分布式架构频道. 回顾视频以及 PPT 查看地址见文末.欢迎加入直播互动钉钉群 : 30315793,不错过每场直播. 大 ...

  3. ESFramework网络通信框架 4.0 性能测试

    本实验用于测试ESFramework网络通信框架服务端引擎的性能,测试程序使用ESFramework 4.0版本. 一.准备工作 测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端. ...

  4. ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage

    ESFramework网络通信框架与元数据 较之C++而言,.NET是一个更加"动态"的平台,其动态能力建立在反射机制之上,而反射的基础是"元数据". 上文已经 ...

  5. 高性能udp服务器架构,优秀的国产高性能TCP/UDP/HTTP开源网络通信框架——HP

    介绍 HP-Socket是国人开发的一套高性能的TCP/UDP/HTTP网络通信框架,包含了服务端.客户端以及Agent组件,可用于各种不同应用场景的通信系统,并且提供了C/C++.C#.Delphi ...

  6. ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂

    一.ESFramework网络通信框架与消息处理器 无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework网络通信框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了 ...

  7. hudo as3 网络通信框架

    发布个去年写的 hudo as3 网络通信框架 支持sgs 0.9.7 http://code.google.com/p/hudo/

  8. Mina网络通信框架

    认识 Mina Apache Mina Server 是一个网络通信应用框架,与 Netty 出自同一作者,Netty 借鉴了部分 Mina 的设计思路. Mina 主要是对基于 TCP/IP.UDP ...

  9. HP-Socket v5.4.4 发布,高性能跨平台网络通信框架

    百度智能云 云生态狂欢季 热门云产品1折起>>>   HP-Socket提供以下几类组件,详细内容请参考<HP-Socket网络通信框架开发指南>: Server:基于I ...

  10. DotNetty网络通信框架学习

    DotNetty网络通信框架学习 目录: 一.DotNetty网络通信框架学习之初视Netty 二.DotNetty网络通信框架学习之源码分析

最新文章

  1. ERROR: Failed to resolve: com.android.databinding:library:3.4.2
  2. [ATF]-ATF启动--BL31跳转到optee和uboot
  3. android 对for循环进行优化
  4. animate.css(第三方动画使用方法)
  5. Visual Studio 2010 Ultimate敏捷利剑:详解Scrum
  6. RHCE 学习笔记(24) - LVM 逻辑卷
  7. 扩展编写jquery插件的方法
  8. 文本显示变量_几千个IO状态显示.十几分钟搞定实例
  9. linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup
  10. Linux 命令整理 —— 基本操作
  11. 梯度下降法-深度AI
  12. Zookeeper的客户端Curator基本使用
  13. linux线程能删除自身吗,Linux内核本身和进程的区别 内核线程、用户进程、用户...
  14. 计算机组成与系统结构习题
  15. Linux 普通用户su root 权限的开启和禁止
  16. nifi mysql to mysql_NiFi 实战
  17. python 自动输入_鼠标自动点击、键盘自动输入?几行Python代码搞定
  18. 通信使用matlab三元码实验报告,Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验...
  19. linux 软件安装笔记
  20. python安装jupyterlab_jupyter及jupyterlab安装使用

热门文章

  1. 新时期的阿里妈妈广告引擎
  2. matlab正态分布均值和方差,MATLAB如何使用normstat函数计算正态分布的期望与方差...
  3. 用matlab绘制克莱因瓶,用SolidWorks只需4个特征,便可画成一个漂亮的克莱因瓶子...
  4. MapGIS 学习资料下载
  5. html给div设置背景显示不出来,html – div背景没有显示
  6. 计算机教室冷量负荷,空调设计时,楼层或者个别房间的空调冷负荷是怎样确定的...
  7. GHOST系统封装教程 系统封装工具 XP系统封装(三)
  8. 抓取整个网页的图像捕捉工具:Web2Pic Pro
  9. jasypt加密器的设置原理
  10. 什么情况?苹果把办公室建到了黑莓软件部门后院