zAPI 代码库继续可用,但已停止新特性开发。所有新功能、智能体通讯增强及长期支持已迁移至:
LingoFuse 在 zAPI 的跨语言 RPC 核心之上,新增:
- 动态智能体通讯(
LF_Generate_AppName+LF_BindApp) - 流式有序通知(
LF_Sequenced_Notify) - 部署模式(节点无序启动)、重叠连接(多应用共址)
- 更完善的 AI 代码生成工具链(Pascal → 结构体 → 多语言客户端)
- 标准化了全平台 HTTP 桥接器(bridge.py),分布式的json进来被纯二进制转发,性能更强
👉 立即前往 LingoFuse 仓库体验新版本: https://github.com/PassByYou888/LingoFuse
zAPI 是一个基于 纯 C ABI 的跨语言 RPC 框架,让 C++、Python、Go、Rust、Java、C#、Pascal、PHP、Node.js 等 10+ 种语言编写的服务能够互相调用,就像调用本地函数一样简单。
核心承诺: 无需 IDL,无需代码生成,无需学习新协议——用你熟悉的语言,调用全世界。
zAPI 是一个完全开放、非商业性的开源项目。
- ✅ 永久免费:MIT 许可证,任何个人、团队、企业均可自由使用,包括商业用途。
- ✅ 无商业捆绑:没有任何收费功能、付费订阅或商业版本。
- ✅ 社区驱动:所有发展决策来自社区贡献者,而非商业公司。
- ✅ 开放协作:欢迎任何形式的贡献——代码、文档、测试、Issue 讨论。
- ✅ 透明开发:所有源码公开,构建过程可复现,无闭源组件。
💡 我们相信: 跨语言通信应该是每个开发者的基本权利,而不应该被商业壁垒所限制。zAPI 将始终如一地保持开放、免费、社区驱动。
zAPI 基于纯 C 动态库设计,任何支持 FFI 的语言都能接入。你不需要学习新的 IDL,不需要代码生成,不需要复杂的配置——只需一个头文件,就能让函数跨语言、跨进程、跨机器运行。
// C 语言注册一个 API
static void __cdecl AddCallback(void* trigger, void* input, void* output) {
int a, b;
API_ReadBuffer((TDataHnd)input, &a, sizeof(a));
API_ReadBuffer((TDataHnd)input, &b, sizeof(b));
int sum = a + b;
API_WriteBuffer((TDataHnd)output, &sum, sizeof(sum));
}
int main() {
// 库会在第一次调用 API 函数时自动加载,无需手动调用加载函数
TAppHnd app = API_Create_APPHnd("Calc", "Calculator");
API_Reg_Call(app, "add", "Add two ints", NULL, AddCallback);
// 准备网络...
API_Prepare_Service("0.0.0.0", "127.0.0.1:9898");
API_Prepare_Client("127.0.0.1:9898", app);
API_Prepare_Done();
// 这个 API 现在可以被任何语言调用
}| 特性 | 说明 |
|---|---|
| 🌍 10+ 语言绑定 | C++、Python、Go、Rust、Java、C#、Pascal、VB.NET、PHP、Node.js、Web.js — 开箱即用 |
| ⚡ 高性能 | IPC 模式延迟 < 1ms,吞吐量 10,000+ 请求/秒 |
| 🔌 双通信模式 | TCP(跨机器)+ IPC(同机微秒级延迟) |
| 🔄 自动服务发现 | 基于 C4 服务网格,自动注册、发现、负载均衡 |
| 🛡️ 容错与重连 | 断线自动重连,服务自动重新注册 |
| 🧵 全线程安全 | 所有 API 均支持并发调用 |
| 📦 零拷贝传输 | 直接访问内部缓冲区,极致性能 |
| 🎯 两种调用模式 | 请求-响应(Call)+ 单向通知(Notify) |
| 🔧 动态注销 API | API_UnReg —— 运行时移除 API,自动广播至所有对等节点(约 3 秒传播) |
| ⚙️ 运行时配置 | API_SetOption —— 动态调整认证密码、等待连接、IPC 线程池等参数,无需重启 |
| 🔧 零配置启动 | 首次运行自动生成配置文件,无需重新编译即可调优 |
zAPI 支持两种集成方式:
- 原生 FFI 绑定 —— 语言可以直接通过 FFI 加载 C 动态库(C、C++、Python、Go、Rust、Java、C#、Pascal、VB.NET)。
- HTTP 网关(ZAPI Bridge) —— 无法直接加载 C 库的语言,通过轻量级 HTTP → zAPI 网关接入(PHP、Node.js、Web.js 以及任何支持 HTTP 的语言)。
| 语言 | 集成方式 | 文档 | 示例 |
|---|---|---|---|
| C++ | 原生 FFI(RAII) | 📖 使用指南 | 7 个示例 |
| C | 原生 FFI(显式加载) | 📖 使用指南 | 7 个示例 |
| Python | 原生 FFI(ctypes + @expose) |
📖 完整指南 | 20+ 示例 |
| Go | 原生 FFI(CGO) | 📖 完整指南 | 14 个示例 |
| Rust | 原生 FFI(libloading + RAII) |
📖 使用指南 | 14 个示例 |
| Java | 原生 FFI(JNA + AutoCloseable) | 📖 使用指南 | 4 个示例 |
| C# | 原生 FFI(P/Invoke + .NET 8+) | 📖 完整指南 | 7 个示例 |
| VB.NET | 原生 FFI(P/Invoke) | 📖 使用指南 | 5 个示例 |
| Pascal (Delphi/FPC) | 原生 FFI(external 自动加载) |
📖 完整指南 | 3 个示例 |
| PHP | HTTP 网关(ZAPI Bridge) | 📖 Bridge 完整手册 | PHP 客户端 |
| Node.js v2.0 | HTTP 网关(ZAPI Bridge) | 📖 Bridge 完整手册 | Node.js 客户端 |
| Web.js (浏览器) | HTTP 网关(ZAPI Bridge) | 📖 js_api 使用指南 | js_api 示例 |
Node.js v2.0 现已改用 ZAPI Bridge —— 一个轻量级 Python HTTP 网关,提供完整的双向跨语言调用能力,无需原生依赖。详细说明见 Bridge 完整手册。
任何支持 C ABI 的语言都可以接入——您甚至可以为自己的语言编写绑定。
从 Releases 下载对应平台的动态库:
| 平台 | 核心库 | IPC 依赖 |
|---|---|---|
| Windows 64-bit | z_api_hub64.dll |
z_ipc_64.dll |
| Linux | libz_api_hub.so |
libz_ipc.so |
| macOS | libz_api_hub.dylib |
libz_ipc.dylib |
# service.py
from api_hub import Server
app = Server("Calculator")
@app.expose("add")
def add(a: int, b: int) -> int:
return a + b
if __name__ == "__main__":
app.start("ipc:calc_service")
input("按 Enter 停止...")
app.stop()package main
import (
"fmt"
"github.com/PassByYou888/zAPI/api_hub"
)
func main() {
client, _ := api_hub.NewClient()
client.PrepareClient("ipc:calc_service")
client.PrepareDone()
param, _ := client.CreateDataHnd("add")
client.WriteInt32(param, 10)
client.WriteInt32(param, 20)
result, _ := client.Call("Calculator", param, 3000)
sum, _ := client.ReadInt32(result)
fmt.Printf("10 + 20 = %d\n", sum) // 输出: 10 + 20 = 30
}<?php
require_once 'Py/bridge/PHP/ZAPIBridgeClient.php';
$client = new ZAPIBridgeClient('http://127.0.0.1:8080/v1');
$result = $client->invoke('Calculator', 'add', [10, 20]);
echo "10 + 20 = " . $result . "\n"; // 输出: 10 + 20 = 30
?>运行:
# 终端 1:启动 Python 服务
python service.py
# 终端 2:启动 ZAPI Bridge(HTTP 网关)
cd Py/bridge
python zapi_bridge.py
# 终端 3:运行 Go 客户端(原生)
go run client.go
# 或者运行 PHP 客户端(通过 HTTP 网关)
php client.phpPython 写的服务,Go(原生)或 PHP(通过 HTTP 网关)直接调用——不需要任何额外配置。
如果你需要从源码自行构建 zAPI 动态库(例如特殊平台、定制需求),请参阅完整的构建指南:
该指南涵盖:
| 平台 | 构建方式 |
|---|---|
| Windows | 安装 Lazarus → lazbuild z_api_hub.lpi |
| Linux(有 Lazarus 包) | 包管理器安装 Lazarus → lazbuild z_api_hub.lpi |
| Linux(无 Lazarus / FPC 版本过低) | 手动编译 lazbuild(使用 FPC 3.3.1)→ 构建 zAPI |
构建核心命令(前提:已安装 Lazarus 且 FPC ≥ 3.2.2):
git clone --recursive https://github.com/PassByYou888/zAPI.git
cd zAPI/src
lazbuild z_api_hub.lpi
⚠️ 注意:克隆时必须使用--recursive选项拉取所有子模块(zIPC、mimalloc4p)。FPC 版本必须 ≥ 3.2.2,否则请参阅构建指南中的“手动构建 lazbuild”路线。
测试环境: Intel Xeon Gold 6248 / 32GB RAM / Ubuntu 22.04
| 通信模式 | 平均延迟 (p50) | 最大吞吐量 | 适用场景 |
|---|---|---|---|
| 同机 IPC(命名管道) | < 0.8 ms | ~12,000 req/s | 单机微服务、边缘计算 |
| 本地 TCP 回环 | ~2.5 ms | ~6,500 req/s | 开发测试环境 |
| 跨机器局域网 TCP | ~5-15 ms | 受带宽限制 | 生产环境分布式部署 |
对比参照:
| 方案 | 典型延迟 | 相对开销 |
|---|---|---|
| zAPI (IPC) | < 1 ms | 基准 |
| zAPI (TCP) | ~2-3 ms | +2-3 ms |
| gRPC (TCP) | ~5-8 ms | +4-6 ms |
| HTTP REST (JSON) | ~10-20 ms | +9-18 ms |
性能优势来源:
- 零拷贝数据传递:
API_GetBuffer()直接返回内部指针,无二次复制。 - 二进制协议: 无 JSON/Protobuf 编解码开销。
- C 层并发调度: 回调在 C 线程池执行,不受 Python/Node 等语言的 GIL 限制。
想让您亲眼看到负载均衡在 10 多种语言之间如何工作?Cross Demo 是一个不到 200 行代码的示例集群,它让您可以用 Python、Go、Rust、Java、C#、Pascal 等语言启动任意数量的工作节点,所有节点自动注册到同一个服务网格,客户端请求会被 C4 网格自动均匀分发到各个节点。
- 🚀 Cross Demo 全语言实战手册 —— 一键启动所有语言节点的操作指南,含详细的命令行步骤。
- 🚀 Cross Demo:分布式计算的可视化“蜂群” 🐝 —— 深入理解负载均衡原理、二进制序列化协议以及跨语言互调的底层机制。
无论您用哪种语言,Cross Demo 都能让您直观感受 zAPI 的“语言透明”和“自动治理”能力。推荐您在跑通“5 分钟快速体验”后,立即尝试 Cross Demo,感受多语言集群的魅力。
任意语言的客户端可以调用任意语言的服务端:
| 服务端 ↓ / 客户端 → | C++ | Python | Go | Rust | Java | C# | Pascal | PHP | Node | Web |
|---|---|---|---|---|---|---|---|---|---|---|
| C++ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Rust | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Java | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| C# | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Pascal | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
PHP 和 Node.js 客户端通过 ZAPI Bridge(HTTP 网关)与所有服务通信。
zAPI/
├── Binary/ # 动态库和可执行文件
│ ├── z_api_hub64.dll # 核心动态库
│ └── z_ipc_64.dll # IPC 支持库
├── src/ # ⭐ 核心源码和构建脚本
│ ├── z_api_hub.lpi # 主项目文件(构建动态库)
│ ├── CONTRIBUTING.md # 完整构建指南
│ └── ...
├── C++/ # C/C++ 绑定 + 示例
├── Py/ # Python 绑定 + 20+ 示例
│ ├── api_hub/ # Python 核心绑定
│ ├── bridge/ # 🌉 ZAPI Bridge(PHP/Node.js/Pascal HTTP 网关)
│ │ ├── PHP/ # PHP 客户端库
│ │ ├── node.js/ # Node.js 客户端库(v2.0)
│ │ └── pascal/ # Pascal Bridge 示例
│ ├── cross/ # ⭐ 跨语言 Cross Demo(多语言负载均衡演示)
│ │ ├── nodejs/ # Node.js 客户端示例
│ │ └── php/ # PHP 客户端示例
│ ├── node/ # Node.js 网关(旧版,已被 Bridge 取代)
│ └── web/ # Web.js 浏览器网关
├── Go/ # Go 绑定 + 14 个示例
├── java/ # Java 绑定 + JNA
├── rust/ # Rust 绑定 + 14 个示例
├── C#/ # C# 绑定 + 7 个示例
├── VB.NET/ # VB.NET 绑定 + 5 个示例
├── pascal/ # Pascal 完整文档
└── node/ # Node.js 客户端示例(旧版)
ZAPI Bridge 是一个 HTTP ↔ zAPI 双向网关,让 PHP、Node.js 以及任何能发起 HTTP 请求的语言都能接入 zAPI 生态。
核心功能:
- 🌉 双向调用:从 PHP/Node.js 调用 zAPI 服务,同时将 PHP/Node.js 函数暴露为 zAPI 服务。
- 🐘 PHP 完整支持:提供
invoke()、notify()、registerHook()、unregisterHook()等完整客户端 API。 - 🟢 Node.js v2.0:现代化 Promise 风格客户端,取代旧版 npm 方案。
- 📦 零原生依赖:无需 FFI、无需编译——只需 HTTP。
- 🚀 高性能:本地调用典型延迟 1-3ms。
- 🔧 热注册:运行时动态注册/注销 Webhook。
require_once 'ZAPIBridgeClient.php';
$client = new ZAPIBridgeClient('http://127.0.0.1:8080/v1');
$result = $client->invoke('Calculator', 'add', [10, 20]);const { ZAPIBridgeClient } = require('./ZAPIBridgeClient');
const client = new ZAPIBridgeClient('http://127.0.0.1:8080/v1');
const result = await client.invoke('Calculator', 'add', [10, 20]);zAPI 的所有 API 函数都是完全线程安全的。
你可以在成千上万个线程中同时调用API_Call,库会自动处理所有并发。
但需要注意回调执行上下文:
回调函数(TAPI_Call / TAPI_Notify)在后台线程池中执行。这意味着:
- ❌ 禁止在回调中调用
API_Call或API_Notify——可能导致死锁。 - ❌ 禁止在回调中做长时间阻塞操作。
- ❌ 禁止在回调中直接访问 UI 组件。
- ✅ 推荐将耗时任务异步提交到自己的工作线程。
// ❌ 错误做法:在回调中调用 API_Call
static void __cdecl BadCallback(void* trigger, void* input, void* output) {
// 死锁风险!
TDataHnd result = API_Call("OtherApp", input, 5000);
}
// ✅ 正确做法:异步提交任务
static void __cdecl GoodCallback(void* trigger, void* input, void* output) {
// 将请求放入队列,由工作线程处理
WorkQueue.push(input);
// 快速返回
}┌─────────────────────────────────────────────────────────────────┐
│ 应用层(10+ 种语言) │
├──────────┬──────────┬──────────┬──────────┬─────────────────────┤
│ C++ │ Python │ Go │ Rust │ Java / C# │
│ Pascal │ VB.NET │ C │ │ │
├──────────┴──────────┴──────────┴──────────┴─────────────────────┤
│ 统一的 C ABI 动态库层 │
├─────────────────────────────────────────────────────────────────┤
│ C4 分布式服务网格(自动发现/负载均衡) │
├─────────────────────────────────────────────────────────────────┤
│ TCP │ IPC │ 自动服务发现 │
│ (跨机器) │ (同机通信) │ 负载均衡 │
├─────────────────────────────────────────────────────────────────┤
│ ZAPI Bridge(HTTP 网关) │
│ PHP / Node.js / Web.js / 任意 HTTP 客户端 │
└─────────────────────────────────────────────────────────────────┘
- zAPI 帝国藏宝图:一分钟速通全语言版图 — 项目结构总览
- zAPI:让所有编程语言平等对话的分布式服务网格 — 项目概述
快速上手可参考 Pascal Demo 使用说明。
| 语言 | 文档 |
|---|---|
| C++ | API Hub Tool C++ 使用指南 |
| C | API Hub Tool C 语言使用指南 |
| Python | 从零到一,掌握多语言互调 |
| Go | API Hub for Go 从零到一掌握多语言互调 |
| Rust | zAPI Rust 使用指南 |
| Java | API Hub Java 使用指南 |
| C# | API Hub Tool for C# — 完整使用指南 |
| VB.NET | 老哥别卷了,你的 VB.NET 代码今天开始全栈通杀 |
| Pascal | API Hub Tool for Pascal — 完整使用指南 |
| PHP | ZAPI Bridge 完整使用手册 |
| Node.js | ZAPI Bridge 完整使用手册 |
| Web.js | js_api.py 使用指南 |
- Go 微服务架构实战:用 zAPI 替换 gRPC 后,我们的延迟大幅降低
- Python 微服务选型:为什么我们用 zAPI 替代 Flask 作为推理服务网关
- 浏览器调用 C++ 的三种方案对比:为什么我们选择了 zAPI 网关
- ZAPI 数据句柄自动化内存回收机制 —— 为长期稳定运行而设计 —— 深入理解 zAPI 的内存管理策略,保障 7×24 小时高可用。
我们欢迎任何形式的贡献:
- 🐛 报告 Bug
- 💡 提出新特性
- 📝 改进文档
- 🔧 提交 Pull Request
- 🌍 为更多语言编写绑定
构建指南:如果您需要从源码构建 zAPI 动态库,请参阅 CONTRIBUTING.md。
MIT License —— 自由使用、修改、分发,甚至用于商业项目。
如果这个项目对您有帮助,请给我们一个 Star!您的支持是我们持续改进的动力。
让所有语言,相互对话。