自动更新管控端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
xyiege 8916a560dd 调整模块 2 months ago
..
include 修改编码规则适配编译 2 months ago
src 调整模块 2 months ago
.gitignore 增加忽略文件 2 months ago
CMakeLists.txt 调整编译配置 2 months ago
README.md 增加windows下的适配 2 months ago
build.sh 增加说明文档和构建程序 2 months ago
build_windows.bat 增加windows下的适配 2 months ago
test_cmake_config.cmd 调整编译配置 2 months ago
test_compile.cmd windows下测试bat 2 months ago

README.md

RPC Demo Project

这是一个用C语言实现的简单RPC(Remote Procedure Call)框架,可以在Linux环境下运行。这个框架允许客户端程序远程调用服务器上的函数,就像调用本地函数一样。

项目结构

├── include/           # 头文件目录
│   ├── rpc_common.h   # 公共定义和工具函数
│   ├── rpc_transport.h # 网络传输层接口
│   └── rpc_message.h  # 消息序列化和反序列化
├── src/               # 源代码目录
│   ├── rpc_common.c   # 公共函数实现
│   ├── rpc_transport.c # 传输层实现
│   ├── rpc_message.c  # 消息处理实现
│   ├── rpc_server.c   # RPC服务器实现
│   ├── rpc_client.c   # RPC客户端实现
│   └── CMakeLists.txt # 源代码CMake配置
├── cmake/             # CMake模块目录
├── CMakeLists.txt     # 主CMake配置文件
└── README.md          # 项目说明文档

功能特性

  • 支持基本数据类型的远程函数调用(int、float、double、string、bool、void)
  • 支持多参数和返回值
  • 基于TCP/IP协议的网络通信
  • 多线程服务器设计,支持并发请求
  • 使用CMake构建系统

编译和构建

Linux 平台

在Linux环境下,使用以下命令编译项目:

# 创建构建目录
mkdir build && cd build

# 运行CMake配置
cmake ..

# 编译项目
make

# 安装(可选)
make install

Windows 平台

  1. 确保已安装 CMake(3.10 或更高版本)和 Visual Studio 2017 或更高版本
  2. 使用提供的构建脚本(以管理员身份运行命令提示符):
build_windows.bat
  1. 构建完成后,可执行文件将位于 install\bin\ 目录下

或者手动构建:

mkdir build_windows
cd build_windows
cmake .. -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIX=..\install
cmake --build . --config Release
cmake --build . --config Release --target install

运行示例

无论是在Linux还是Windows平台上,运行示例的方式相同:

  1. 首先启动服务器:

    cd install/bin
    ./rpc_server  # Linux
    rpc_server.exe  # Windows
    
  2. 在另一个终端启动客户端:

    cd install/bin
    ./rpc_client  # Linux
    rpc_client.exe  # Windows
    
  3. 客户端将连接到服务器并执行两个示例操作:

    • 调用远程加法函数 add(10, 20)
    • 调用远程函数获取服务器信息 get_server_info()
  4. 查看终端输出以确认操作是否成功完成

使用示例

启动服务器

./bin/rpc_server

服务器将在8080端口上监听客户端连接。

运行客户端

./bin/rpc_client

客户端将连接到服务器并调用两个示例函数:

  • add(10, 20) - 远程加法运算
  • get_server_info() - 获取服务器信息

自定义扩展

注册新的远程函数

要在服务器端添加新的远程函数,您需要:

  1. 实现函数处理器
  2. 使用rpc_register_function注册函数

示例:

// 函数实现
example_handler(rpc_param_t* params, int args_count, rpc_param_t* return_value) {
    // 函数逻辑
    return RPC_SUCCESS;
}

// 注册函数
rpc_param_type_t example_params[] = {RPC_TYPE_INT, RPC_TYPE_STRING};
rpc_register_function("example_func", example_handler, RPC_TYPE_STRING, example_params, 2);

客户端调用新函数

在客户端调用新注册的函数:

rpc_param_t params[2];
rpc_param_t return_value;

// 设置参数
rpc_init_param(&params[0], RPC_TYPE_INT);
params[0].value.int_val = 123;

rpc_init_param(&params[1], RPC_TYPE_STRING);
params[1].value.string_val = "example string";

// 设置返回值
rpc_init_param(&return_value, RPC_TYPE_STRING);

// 调用远程函数
int ret = rpc_call(client, "example_func", params, 2, &return_value);

注意事项

  • 本项目是一个教学示例,可能不适合在生产环境中使用
  • 当前实现中,字符串参数和返回值的处理使用了简单的内存管理策略,在实际应用中可能需要更复杂的处理
  • 错误处理机制相对简单,实际应用中可能需要更完善的错误处理