Browse Source

增加说明文档和构建程序

master
xyiege 4 months ago
parent
commit
c8e3004ce1
  1. 119
      scalib/README.md
  2. 120
      scalib/build.sh

119
scalib/README.md

@ -0,0 +1,119 @@
# 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环境下,使用以下命令编译项目:
```bash
# 创建构建目录
mkdir build && cd build
# 运行CMake配置
cmake ..
# 编译项目
make
# 安装(可选)
make install
```
## 使用示例
### 启动服务器
```bash
./bin/rpc_server
```
服务器将在8080端口上监听客户端连接。
### 运行客户端
```bash
./bin/rpc_client
```
客户端将连接到服务器并调用两个示例函数:
- `add(10, 20)` - 远程加法运算
- `get_server_info()` - 获取服务器信息
## 自定义扩展
### 注册新的远程函数
要在服务器端添加新的远程函数,您需要:
1. 实现函数处理器
2. 使用`rpc_register_function`注册函数
示例:
```c
// 函数实现
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);
```
### 客户端调用新函数
在客户端调用新注册的函数:
```c
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);
```
## 注意事项
- 本项目是一个教学示例,可能不适合在生产环境中使用
- 当前实现中,字符串参数和返回值的处理使用了简单的内存管理策略,在实际应用中可能需要更复杂的处理
- 错误处理机制相对简单,实际应用中可能需要更完善的错误处理

120
scalib/build.sh

@ -0,0 +1,120 @@
#!/bin/bash
# RPC项目构建脚本
# 设置默认构建目录
build_dir="build"
install_prefix="/usr/local"
# 显示帮助信息
show_help() {
echo "用法: $0 [选项]"
echo "选项:"
echo " --help 显示帮助信息"
echo " --clean 清理构建目录"
echo " --install 安装到系统目录"
echo " --prefix=DIR 设置安装前缀 (默认: /usr/local)"
echo " --build-dir=DIR 设置构建目录 (默认: build)"
}
# 处理命令行参数
for arg in "$@";
do
case $arg in
--help)
show_help
exit 0
;;
--clean)
echo "清理构建目录 $build_dir..."
rm -rf "$build_dir"
exit 0
;;
--install)
install=true
shift
;;
--prefix=*)
install_prefix="${arg#*=}"
shift
;;
--build-dir=*)
build_dir="${arg#*=}"
shift
;;
*)
echo "未知选项: $arg"
show_help
exit 1
;;
esac
done
# 检查是否在Linux环境下运行
if [[ "$(uname)" != "Linux" ]]; then
echo "警告: 这个脚本设计用于Linux环境,您的操作系统可能不兼容"
echo "如果您在Windows上,可以尝试使用WSL或其他Linux子系统"
fi
# 检查是否安装了CMake
if ! command -v cmake &> /dev/null;
then
echo "错误: CMake未安装,请先安装CMake"
echo "Ubuntu/Debian: sudo apt-get install cmake"
echo "CentOS/RHEL: sudo yum install cmake"
exit 1
fi
# 检查是否安装了GCC
if ! command -v gcc &> /dev/null;
then
echo "错误: GCC编译器未安装,请先安装GCC"
echo "Ubuntu/Debian: sudo apt-get install gcc"
echo "CentOS/RHEL: sudo yum install gcc"
exit 1
fi
# 创建构建目录
mkdir -p "$build_dir"
cd "$build_dir"
# 运行CMake配置
echo "运行CMake配置..."
echo "安装前缀: $install_prefix"
cmake .. -DCMAKE_INSTALL_PREFIX="$install_prefix"
if [ $? -ne 0 ];
then
echo "CMake配置失败,请检查错误信息"
exit 1
fi
# 编译项目
echo "编译项目..."
make -j$(nproc)
if [ $? -ne 0 ];
then
echo "编译失败,请检查错误信息"
exit 1
fi
# 安装(如果请求)
if [ "$install" = true ];
then
echo "安装项目到 $install_prefix..."
sudo make install
if [ $? -ne 0 ];
then
echo "安装失败,请检查错误信息"
exit 1
fi
echo "安装成功!"
fi
# 显示成功信息
echo "构建成功! 可执行文件位于 $build_dir/bin/"
echo "运行服务器: ./$build_dir/bin/rpc_server"
echo "运行客户端: ./$build_dir/bin/rpc_client"
Loading…
Cancel
Save