RPC通信

基于C++实现JSON-RPC服务及测试

  •  下载 Apifox 软件,作为客户端发送 http post 请求
  •  实现服务器代码:用到的三方库代码: cpp-httplib,jsonrpccxx, nlohmman::json
  •  需要的c++编译器版本,c17
  •  注意客户端发送请求<里面的param参数必须是数组>

数据结构和编解码定义

c++本地方法

json-rpc回调注册:

主要技术点:
1. 模板元编程,将 json对象转为c++函数需要的参数,返回值:json类型

2. 利用 nlohmman::json 的自动转换能力,

假设 method 返回 std::tuple<int, std::string, std::vector<double>> 类型,nlohmann::json 会自动将该 tuple 转换为 JSON 数组,其中:

  • int 会成为一个 JSON 整数;
  • std::string 会成为一个 JSON 字符串;
  • std::vector<double> 会成为一个 JSON 数组。

测试:

//请求
{
"jsonrpc": "2.0",
"method": "AllProducts",
"params": [],
"id": 1
}
//回复
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "category": "order",
            "id": "1",
            "name": "apple",
            "price": 56.2
        },
        {
            "category": "cc",
            "id": "2",
            "name": "huawei",
            "price": 12.2
        }
    ]
}


//请求
{
"jsonrpc": "2.0",
"method": "getInfo",
"params": [1, "wujie", [9.2,3.4,2,1,2]],
"id": 1
}
//回复
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        1,
        "wujie",
        [
            9.2,
            3.4,
            2.0,
            1.0,
            2.0
        ]
    ]
}


//请求
{
"jsonrpc": "2.0",
"method": "AddProduct",
"params": [{
        "category": "order",
        "id": "3",
        "name": "xiaomi",
        "price": 44.4
    }    
    ],
"id": 1
}

//回复
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": true
}

RPC(远程过程调用)是一个计算机通信协议/规范/标准,允许运行于一台计算机的程序通过网络调用另一台计算机的子程序,这种调用就像调用本地程序一样,采用Client/Server模式,可实现进程间的通信,许多技术框架基于此概念实现。其主要功能目标是让构建分布式计算(应用)更容易,通过网络从远程计算机程序上请求服务,开发者无需了解底层网络技术,简单来说就是像调用本地服务一样调用远程服务,对开发者而言是透明的 [^2][^4]。 RPC框架一般使用长连接,不必每次通信都进行3次握手,可减少网络开销。同时一般都有注册中心,具备丰富的监控管理功能。发布、下线接口、动态扩展等操作对调用方来说是无感知、统一化的。而且协议私密,安全性较高,能做到协议更简单、内容更小、效率更高。此外,RPC是面向服务的更高级的抽象,支持服务注册发现、负载均衡、超时重试、熔断降级等高级特性 [^3][^4]。 在应用场景方面,RPC适用于实时通信领域,可用于构建分布式计算应用,让不同进程之间实现高效通信,比如在大型互联网应用中,各个微服务之间的交互就可以使用RPC来实现 [^1][^2][^4]。 在实现方式上,不同的RPC框架有不同的实现。例如,使用临时节点可以方便地支持集群环境下的动态扩容与缩容,新的服务提供者上线或者旧的提供者下线,都能迅速反映到服务注册中心,进而使得消费者能及时感知并调整访问策略 [^5]。 ```python # 以下是一个简单的RPC调用示例(伪代码) # 客户端 import rpc_client # 创建RPC客户端实例 client = rpc_client.RPCClient() # 调用远程服务 result = client.call("remote_function", param1, param2) print(result) # 服务端 import rpc_server # 定义远程函数 def remote_function(param1, param2): return param1 + param2 # 创建RPC服务端实例 server = rpc_server.RPCServer() # 注册远程函数 server.register_function(remote_function) # 启动服务 server.start() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何处惹尘埃~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值