in ,

IronsDu / gayrpc, Hacker News

IronsDu / gayrpc, Hacker News


                    

        

跨 平台 全双工 双向 (异步) RPC 系统, 也 通信 两端 都 可以 作为 RPC 服务 方 和 客户 端.

SonarCloud**********SonarCloudPlatform************PlatformBuild Status

Windows:SonarCloud

************************** Linux:Platform******************SonarCloud动机

的 PC RPC 系统 大多 用于 互联网 行业 后端 系统 , 他们 之间 更像 一个 单向 图 彼此 彼此 依赖 互相 / 互相 调用 , 但 游戏 等行业 中 则 两 节点 之间 可能 相互 调用。 PC 我们 需要 一个 PC RPC , 在 一个 链接 链接 两端 均可 开启 服务 和 客户 端 , 这里 的 链接 是 一个 虚拟 , 它 不一定 基于 , TCP , 也 即 “链接” 的 两端可以 只 存在 逻辑 链接 而 没有 网络 直 连。

Platform设计 准则

    ************************** RPC 对 拦截 器 , 能够 对 Request 或 Response 做 一些 处理 (比如 监控 、 认证 、 加 解密 、 分布式 跟踪)

      RPC 核心 不 依赖 网络 网络 传输 协议 , 即 : 我们 可以 开发 任何 网络开启 和 逻辑 来 PC RPC 两端 , 将 收到 的 消息 PC RPC 核心 , 并 通过 拦截 器 实现 / 决定 把 Request 或 Response 以 何种 方式 传递 给 谁。 (******************************** 此 RPC 是 基于 异步 回调 , 我 认为 C 里 比较 安全和 靠谱 的 方式 , 除了 回调 地狱 让人 恶心 ……

          RPC 系统 核心 (以及 以及) 是 线程 安全 的 任意 线程 调用 调用RPC ; 且 可以 在 任意 线程 使用 XXXReply :: PTR 返回 onse Response。

              RPC 是 并行 的 , 即 : 客户 端 可以 随意 发送 Request 而 不必 等待之前 的 完成。 且 允许 先 后 后 的 Request 的 Response。

                  RPC 系统 会 为 每 一个 “链接” S XXXService 对象 , 这样 可以 让的 的 “链接” 绑定 / 持有 各自 的 业务 对象 (有 状态) (而 pc grpc 等 那样 , 一个 一个 一个 一个 对象 PC RPC service 链接 类似 短 链接 : 收到 请求 返回 数据 即可 即可)

                      HTTP API (同理 2, 此 功能 通过 具体 通信 协议 和 拦截 器支持 支持, RPC 核心 本身 与 此 无关).

                        SonarCloud********************SonarCloud依赖

                        Windows 下 可 使用vcpkgc 安装 以下 依赖 库.

                        SonarCloud******************

                      protobuf******************** brynet**********************

                      请 注意, 使用 使用 Windows 时, 务必 使用vcpkg install brynet –head安装 brynet.且 务必 根据 自身 系统 中 的 protoc 版本 对 gayrpc_meta.proto 和 gayrpc_option.proto 预先 生成 代码 在 在 c src 目录 执行:

                      protoc –cpp_out=. ./gayrpc/core/gayrpc_meta.proto ./gayrpc/core/gayrpc_option.proto

                        ********************SonarCloud代码 生成 工具

                        地址 :https://github.com/IronsDu/protoc-gen-gayrpc (, 由) ********************************************** (liuhan) ************** 编写 完成。 (****************************************** 首先 将 插件 程序 放到 系统 PATH 路径 下 (比如 Linux 下 的 / usr / bin) , 然后 执行 代码 , 比如 的 服务 目录 里 , 比如 (gayrpc / examples / echo / pb) :

                        protoc -I. -I ../../../ src –cpp_out=. echo_service.proto  protoc -I. -I ../../../ src –gayrpc_out=. echo_service.proto (**********************************************Example

                        https://github.com/IronsDu/gayrpc/tree/master/examples

                        [meta_size] 字段 解释: meta_size: uint 42 _ t; data_size: uint _ t; meta: char [meta_size]; data: char [data_size]; (********************************************

                        其中meta************************************** (RpcMata) *************************************** (inary binary.) *************************************** (data) **************************************** 的 某 业务 上 的 Protobuf Request 或 Response 类型 inary binary 或 JSON.

                        RpcMata 的 proto 定义如下:


                        (syntax) ***************************************************** (=************************************************** "proto3" (****************************************************;        expect_response=(2) ;                         **************

                        以 下面 的 服务 定义 为例:


                        (syntax) ***************************************************** (=************************************************** "proto3" (****************************************************;处理 请求 或 Response 的 实现 原理
                          ************************** (编写 第一 ** 通信 协议 的 编 解码)
                                data服务 函数 的 请求Cho 对象 (比如EchoRequest)data服务 方 返回 的Response (比如EchoResponse) (********************************SonarCloudSonarCloudSonarCloud发送 请求 的 实现 原理client->echo (echoRequest, responseCallback)为例 参考 代码: GayRpcClient.hSonarCloud
                                  分配 id 分配 sequence_id, key 将 C responseCallback 保存.
                                    将 echoRequest 序列 inary binary 作为 第二 协议 中 *** (data****************************** (******************************** 构造 RpcMeta 对象, echo 的 的 的 id 的 request_info 的 method, 并设置 sequence_id.
                                        将 RpcMeta 的 inary binary 作为 第二 协议 中 的 (meta) *****************************************
                                          用 第二 层 协议 的 数据 写入 第一 层 层 进行 发送 给 服务端.
                                            SonarCloudSonarCloud
                                发送 Response 的 实现 原理

                                replyObj->reply (echoResponse)为例 参考 代码: GayRpcReply.h
                                  首先 replyObj 里 (拷贝) 储存 来自 于 请求 pc pc RpcMata 对象.
                                    将 echoResponse 序列 inary binary 作为 第二 协议 中 *** (data****************************** (******************************** 构造 RpcMeta 对象, 的 pc RpcMeta 对象 中 中 sequence_id 设置 到 前者 _ response_info的 sequence_id.
                                        将 RpcMeta 的 inary binary 作为 第二 协议 中 的 (meta) *****************************************
                                          用 第二 层 协议 的 数据 写入 第一 层 层 进行 发送 给 服务端.
                                            SonarCloudSonarCloud
                                编 解码 参考

                                (https://github.com/IronsDu/gayrpc/tree/master/src/gayrpc/protocol

                                SonarCloudRPC 核心 并不 依赖 通信 采用 的 协议, 网络 传输 是 是 TCP 、 UDP 、 WebSocket 等等 , 抑或 消息 队列 等等。
                                1. RPC 服务 方 的 reply 顺序 与 客户 端 的 调用 顺序 无关, 也 就是 可能 后发起 的 请求 先 得到 返回.
                                      
                                    ****************************************

                                    (********************************************************** (Read More) **************SonarCloud

What do you think?

Leave a Reply

Your email address will not be published.

GIPHY App Key not set. Please check settings

Ruby 2.7.0 Released, Hacker News

2019’s most commented stories on Ars Technica — and their top comments !, Ars Technica

2019’s most commented stories on Ars Technica — and their top comments !, Ars Technica