# fleet-server **Repository Path**: syswu/apiserver ## Basic Information - **Project Name**: fleet-server - **Description**: kubernetes风格的apiserver。请联系杨紫超,邮箱地址:yangzichao21@otcaix.iiscas.ac.cn - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-09-24 - **Last Updated**: 2025-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # apiserver ## 介绍 参考[kubernetes](https://kubernetes.io/)风格的轻量级APIServer实现,支持: - HTTP over TCP - HTTP over UDP - HTTP over QUIC - Mock HTTP over RS422 详细文档参见[wiki](https://gitee.com/iscas-system/fleet/wikis/%E9%A1%B9%E7%9B%AE%E4%B8%BB%E9%A1%B5) ## 测试说明 以下仅是示例,请根据apiserver具体url进行测试 ### HTTP over TCP ```cookie curl -X POST http://127.0.0.1:8080/test \ -H "Host: example.com" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"key1": "value1", "key2": "value2"}' ``` ### HTTP over UDP ```cookie echo -e "POST /test HTTP/1.1\r Host: example.com\r Authorization: Bearer YOUR_ACCESS_TOKEN\r Content-Type: application/json\r Content-Length: 27\r \r {\"key1\": \"value1\", \"key2\": \"value2\"}" | socat - UDP:127.0.0.1:8080 ``` ### HTTP over QUIC 请自己编译[ngtcp2](https://github.com/ngtcp2/ngtcp2),使用examples/tests/ngtcp2test/client.py ```cookie python3 client.py -v --host=127.0.0.1 --port=4433 /test \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ --data '{"key1": "value1", "key2": "value2"}' ``` ### Mock HTTP over RS422 安装socat用于模拟串口 ```sh sudo dnf install socat ``` 使用socat创建发送和接收串口,波特率921600bps、8位数据位、1位奇校验位、1位停止位,之后启动apiserver ```sh sudo socat PTY,link=/dev/RS422_send,raw,echo=0,b921600,cs8,parenb=1,cstopb=0,perm=0666 PTY,link=/dev/RS422_recv,raw,echo=0,b921600,cs8,parenb=1,cstopb=0,perm=0666 ``` 生成约10MB随机数据,按896B对齐 ```sh dd if=/dev/urandom of=random_file.bin bs=896 count=12000 ``` 运行`examples/send_rs422_packet.rs`,服务接收到数据通过接口存入`storage.replica.location/test.binapp云平台`,并在本地存为`test.bin`用于验证 检查数据接收是否正确 ```sh diff random_file.bin test.bin ``` ## 项目结构 ``` apiserver/ ├── src/ # 源代码目录 │ ├── cores/ # 核心功能实现 │ ├── db/ # 数据库相关代码 │ ├── middleware/ # 中间件实现 │ ├── utils/ # 工具函数 │ ├── lib.rs # 库入口文件 │ └── schema.rs # 数据库模式定义 ├── examples/ # 示例代码 │ ├── basic_example.rs # 基础示例 │ └── send_rs422_packet.rs # RS422通信示例 ├── tests/ # 测试代码 ├── migrations/ # 数据库迁移文件 ├── docs/ # 文档 ├── images/ # 图片资源 ├── Cargo.toml # 项目配置和依赖 ├── Cargo.lock # 依赖版本锁定文件 └── diesel.toml # Diesel ORM配置 ``` ### 主要功能模块 - **cores/**: 实现核心API服务器功能 - **db/**: 数据库操作和ORM相关代码 - **middleware/**: 中间件实现,如认证、日志等 - **utils/**: 通用工具函数和辅助代码 - **examples/**: 包含各种使用示例,如HTTP、UDP、QUIC和RS422通信示例 ### 主要依赖 - **actix-web**: Web框架 - **diesel**: ORM框架 - **tokio**: 异步运行时 - **quiche**: QUIC协议实现 - **serialport**: 串口通信 - **consensus_kv**: 分布式键值存储