本项目轻量,依赖少,可以集成进各种通信方式(TCP、UDP、消息队列等),使用简单(只有少量功能函数),性能好(哈希值计算索引,无需轮询所有方法),并支持批量调用 (JSON Array) 、自动根据请求生成对应错误信息或构造自定义的错误信息、通知请求和内存管理函数钩子等功能。
- 轻量级 & 最小依赖: 仅依赖 cJSON
- 哈希方法索引: 快速方法查找
- 批量请求: 支持 JSON Array 批量调用
- 可自定义内存管理: 用户可自定义 malloc/free/strdup 钩子
- 线程安全: 内存钩子使用线程局部存储
- POSIX 数组参数: 支持对象和数组两种参数形式
- 方法枚举: 运行时查询已注册方法
将项目源文件(mjsonrpc.c、mjsonrpc.h)和 cJSON 库加入自己的工程一同编译即可,也可以自行编译为动态库进行链接或在本仓库 releases 中下载已经编译好的二进制版本。
详细 API 描述请见 src/mjsonrpc.h,或 本仓库 Doxygen 文档。
#include "mjsonrpc.h"
#include <stdio.h>
#include <stdlib.h>
// 定义一个简单的 JSON-RPC 方法
cJSON *hello_world(mjrpc_func_ctx_t *context, cJSON *params, cJSON *id) {
cJSON *result = cJSON_CreateString("Hello, World!");
return result;
}
int main() {
// 初始化 mjrpc_handle_t
mjrpc_handle_t* handle = mjrpc_create_handle(0);
// 添加一个方法
mjrpc_add_method(handle, hello_world, "hello", NULL);
// 生成 JSON-RPC 请求
const char *json_request = "{\"jsonrpc\":\"2.0\",\"method\":\"hello\",\"id\":1}";
// 处理请求
int result;
char *json_response = mjrpc_process_str(handle, json_request, &result);
// 检查返回值
if (result != MJRPC_RET_OK) {
printf("Error processing request: %d\n", result);
}
// 检查响应字符串
if (json_response) {
printf("Response: %s\n", json_response);
free(json_response);
}
// 释放句柄
mjrpc_destroy_handle(handle);
return 0;
}