# uvipc **Repository Path**: ztwlla/uvipc ## Basic Information - **Project Name**: uvipc - **Description**: No description available - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-09-14 - **Last Updated**: 2026-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # uvIpc + 基于libuv实现的进程间通信 ## 设计说明 ### 架构概述 uvIpc 是一个基于 libuv 的跨平台进程间通信(IPC)模块,采用客户端-服务端架构,支持命名管道(Windows)/Unix域套接字(Linux)或 TCP 通信。 ### 核心组件 #### 1. 服务端 (Server) - **功能**:监听客户端连接,接收并转发消息 - **特点**: - 支持多客户端并发连接 - 自动维护客户端列表 - 支持消息广播和定向发送 - 客户端断开时自动清理资源 #### 2. 客户端 (Client) - **功能**:连接到服务端,发送和接收消息 - **特点**: - 支持自动重连机制(5秒间隔) - 异步消息发送(线程安全) - 支持大数据传输(自动分片和重组) - 注册回调函数接收消息 ### 通信协议 #### 消息格式 ``` [接收者长度(4字节)][接收者名称][总长度(4字节)][发送者长度(4字节)][发送者名称][消息长度(4字节)][消息内容][数据长度(4字节)][数据内容][结尾0(1字节)] ``` #### 大数据处理 - 当数据超过单次接收缓冲区时,自动分片传输 - 接收端自动重组完整数据 - 使用 `big_stream` 缓存未完成的数据 ### 关键特性 #### 1. 跨平台支持 - **Windows**:使用命名管道(Named Pipe) - **Linux**:使用 Unix 域套接字 - **TCP 模式**:可通过 `USE_TCP` 宏启用 TCP 通信 #### 2. 线程安全 - 客户端发送队列使用互斥锁保护 - 支持多线程并发发送消息 - 异步发送机制避免阻塞 #### 3. 内存管理 - 优化的内存分配策略(最大1MB缓冲区) - 自动释放客户端断开时的资源 - 完善的错误处理和内存泄漏防护 #### 4. 性能优化 - 批量处理发送数据,减少锁竞争 - 缓存字符串长度,避免重复计算 - 连接状态检查,避免无效操作 ### API 接口 #### 服务端接口 ```c // 创建服务端 int uv_ipc_server(uv_ipc_handle_t** h, const char* ipc, void* uv); ``` #### 客户端接口 ```c // 创建客户端 int uv_ipc_client(uv_ipc_handle_t** h, const char* ipc, void* uv, const char* name, uv_ipc_recv_cb cb, void* user); // 发送消息 int uv_ipc_send(uv_ipc_handle_t* h, const char* names, const char* msg, const char* data, int len); // 关闭连接 void uv_ipc_close(uv_ipc_handle_t* h); // 获取错误信息 const char* uv_ipc_strerr(int status); ``` ### 使用示例 #### 服务端示例 ```c uv_ipc_handle_t* server; uv_ipc_server(&server, "my_ipc", NULL); // NULL 表示内部创建事件循环 // 服务端自动处理客户端连接和消息转发 ``` #### 客户端示例 ```c // 消息接收回调 void on_recv(uv_ipc_handle_t* h, void* user, char* name, char* msg, char* data, int len) { printf("收到来自 %s 的消息: %s, 数据长度: %d\n", name, msg, len); } uv_ipc_handle_t* client; uv_ipc_client(&client, "my_ipc", NULL, "client1", on_recv, NULL); uv_ipc_send(client, "client2", "hello", "data", 4); ``` ### 编译配置 #### 宏定义 - `USE_TCP`:启用 TCP 通信模式(默认使用管道) - `UV_IPC_EXPORT`:导出符号(Windows DLL) ### 注意事项 1. **命名规范**:客户端名称不能包含逗号(`,`),用于分隔多个接收者 2. **资源释放**:调用 `uv_ipc_close()` 后会自动清理所有资源 3. **线程安全**:`uv_ipc_send()` 是线程安全的,可在任意线程调用 4. **大数据限制**:单次消息数据建议不超过 10MB ## 编译 + windows使用vs2012 + linux使用makefile + CMake ## demo * https://gitee.com/ztwlla/uvMoudles.git * https://github.com/BigPig0/uvMoudles.git ## 第三方库 * libUV: https://github.com/libuv/libuv.git