# somb **Repository Path**: raw_nice/somb ## Basic Information - **Project Name**: somb - **Description**: 一个基于SOA的进程间通信中间件 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-12-19 - **Last Updated**: 2023-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # somb ## 介绍 SOMB(Service Oriented Message Bus), 利用了SOA思想设计的进程间通信组件 SOMB目前只适用于同一个Linux操作系统内进程间的通信,底层使用了Unix Domain Socket和epoll进行消息收发处理 后期计划支持跨系统间的进程间通信(利用TCP/IP) ## 软件架构 软件通信架构说明如下图(灰色部分后期支持) ![sw_usage_pic](./doc/asset/软件通信架构图.png) ## 通信模型基本概念了解 SOMB是采用SOA思想设计、基于服务ID的通信组件部署,将服务ID分为Method和Event两种。 同时SOMB也提供了4种通信模型:SetRequest\Request-Response(同步)\Request-Response(异步)\Event监听 ### SetRequest ![](./doc/asset/setrequest.png) ### Request-Response(同步) ![](./doc/asset/req-resp-sync.png) ### Request-Response(异步) ![](./doc/asset/req-resp-async.png) ### Event监听 ![](./doc/asset/event.png) ## 功能说明 SOMB服务类型、通信模型、API对应关系表
SOMB服务类型、通信模型、API对应关系表
SOMB服务类型 通信模型 消费者端API 服务生产者端API
Method SetRequest i32SOMB_Method_SetRequest
*无需返回服务结果
Request-Response(同步) i32SOMB_Method_Request_Sync i32SOMB_Method_Complete
*返回Response结果
Request-Response(异步) i32SOMB_Method_Request_Async i32SOMB_Method_Complete
*返回Response结果
Event监听 i32SOMB_ServiceListener_Add
i32SOMB_EventListener_Delete

*Method的Event监听指的是
监听服务Available状态
Event Event监听 i32SOMB_ServiceListener_Add
i32SOMB_EventListener_Delete
i32SOMB_Event_Trigger
另外,应用可以选择为传输的数据进行序列化,为此SOMB集成了基于nanopb的编解码API.(当然,应用也可以不使用序列化进行数据传输) ## 安装教程 1. cd somb 2. mkdir build 3. make install 如果需要使用交叉编译,则手动需要在somb/CMakeLists.txt加入相关配置 例如CMAKE_C_COMPILER、CMAKE_CXX_COMPILER、CMAKE_C_FLAGS、CMAKE_CXX_FLAGS 以及必要时修改PROJECT_INSTALL_PREFIX安装路径 ## 使用说明 >针对服务生产者,需要关注 > 1. 如何部署服务(Deploy Service) > 2. 如何提供服务(Provide Service) >针对服务消费者,需要关注 > 1. 如何监听服务(Listen Service) > 2. 如何消费服务(Request Service) somb提供API有头文件somb.h定义 带着上面的问题,参考详细的示例代码 1. example目录下**example_consumer** 和 **example_producer** ## 使用注意事项 **当使用以下接口的发送数据参数,需要注意作为参数的Buffer的申请方法** - i32SOMB_Method_Request_Sync的MthReqData - i32SOMB_Method_Request_Async的MthReqData - i32SOMB_Method_Complete的MthRespData - i32SOMB_Event_Trigger的EventData
发送数据参数的使用场景 发送数据Buffer的申请方法
当发送数据是结构体时
并且结构体包含动态大小的成员变量
发送Buffer需要使用malloc申请,申请长度包含结构体本身大小以及动态变量的最大长度
当发送数据是结构体时
结构体不包含动态大小的成员变量
发送Buffer可以
1.使用malloc申请,申请长度为结构体本身大小
2.使用pb自动生成的 结构体名_size 宏 定义发送Buffer数组
当发送数据是数组时 直接使用数组的头(指针)作为发送参数
当发送数据是NULL 直接NULL作为发送参数
## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request