自动更新管控端
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 de84f25c40 修改项目名称和客户端调用 12 months ago
..
include 增加windows下的适配 12 months ago
src 修改项目名称和客户端调用 12 months ago
.gitignore 增加忽略文件 12 months ago
CMakeLists.txt 修改项目名称和客户端调用 12 months ago
README.md 增加windows下的适配 12 months ago
build.sh 增加说明文档和构建程序 12 months ago
build_windows.bat 增加windows下的适配 12 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);

注意事项

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