kode / process
高性能 PHP 进程与线程管理器,支持 Master-Worker 模型、进程池、IPC 通信、信号处理、队列消费,兼容 PHP 8.1-8.5+
2.8.0
2026-03-23 02:02 UTC
Requires
- php: ^8.1
- ext-pcntl: *
- ext-posix: *
- ext-sockets: *
- kode/context: ^2.0
- kode/fibers: ^2.9
- kode/queue: ^1.0
- psr/log: ^2.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^10.0|^11.0
- swoole/ide-helper: ^5.0
Suggests
- ext-parallel: 用于 kode/parallel 多线程并行处理
- ext-pthreads: 用于多线程支持
- ext-swoole: 用于 Swoole 协程进程管理
- ext-swow: 用于 Swow 协程引擎(跨平台支持)
- ext-sysvmsg: 用于 System V 消息队列 IPC
- ext-sysvsem: 用于信号量同步
- ext-sysvshm: 用于共享内存 IPC
- kode/parallel: 用于多线程并行任务处理(需要 ext-parallel)
- kode/runtime: 用于运行时环境适配(Swoole/Swow/Fiber/Process/Thread)
- swow/swow: 用于 Swow 协程引擎(跨平台支持,Windows/Linux/macOS)
README
高性能 PHP 进程管理器 | 分布式 | 协程 | 多协议
简介
Kode Process 是一款专为高并发场景设计的高性能 PHP 进程管理器,支持分布式集群、Fiber 协程、多协议解析。
特性
| 特性 | 说明 |
|---|---|
| 🚀 极简 API | Kode::worker() 一行启动,自动检测协议 |
| 📡 多协议 | HTTP、WebSocket、TCP、UDP、Text、SSL |
| 🌐 分布式 | Channel 通讯、GlobalData 共享、负载均衡 |
| ⚡ 协程 | Fiber 协程支持,百万级并发 |
| 🔄 平滑重载 | 热更新代码,不中断连接 |
| ⏱️ 定时器 | 一次性、永久、Cron 表达式 |
| 📢 广播 | 全局广播、群组广播、定向发送 |
| 🔒 安全 | SSL/TLS、连接认证、进程隔离 |
| 📊 监控 | 心跳检测、状态监控、进程管理 |
| 🔧 兼容 | Workerman 零成本迁移 |
安装
composer require kode/process
快速开始
HTTP 服务器
<?php require __DIR__ . '/vendor/autoload.php'; use Kode\Process\Kode; Kode::worker('http://0.0.0.0:8080', 4) ->onMessage(function ($conn, $request) { $conn->send('Hello World!'); }) ->start();
WebSocket 服务器
<?php require __DIR__ . '/vendor/autoload.php'; use Kode\Process\Kode; Kode::worker('websocket://0.0.0.0:8081', 4) ->onMessage(fn($conn, $data) => $conn->send($data)) ->start();
TCP 服务器
<?php require __DIR__ . '/vendor/autoload.php'; use Kode\Process\Kode; Kode::worker('tcp://0.0.0.0:9000', 4) ->onMessage(fn($conn, $data) => $conn->send('Echo: ' . $data)) ->start();
命令行工具
# 启动服务 kode start # 停止服务 kode stop # 平滑重载 kode reload # 查看状态 kode status # 版本信息 kode info
支持的协议
| 协议 | 地址格式 | 说明 |
|---|---|---|
| HTTP | http://0.0.0.0:8080 |
HTTP 服务器 |
| WebSocket | websocket://0.0.0.0:8081 |
WebSocket 服务器 |
| TCP | tcp://0.0.0.0:9000 |
原始 TCP |
| Text | text://0.0.0.0:9001 |
文本+换行符 |
| UDP | udp://0.0.0.0:9002 |
UDP 服务器 |
| SSL | ssl://0.0.0.0:443 |
SSL/TLS 加密 |
分布式集群
架构
┌─────────────┐
│ Nginx │
│ 负载均衡 │
└──────┬──────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Server A │ │ Server B │ │ Server C │
│ Worker 1-4│ │ Worker 1-4│ │ Worker 1-4│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└──────────────────┼──────────────────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Channel │ │GlobalData│ │ Redis │
│ :2206 │ │ :2207 │ │ :6379 │
└─────────┘ └──────────┘ └─────────┘
Channel 分布式通讯
use Kode\Process\Channel\Client; Client::connect('192.168.1.100', 2206); Client::on('broadcast', function ($data) { echo "收到广播: " . json_encode($data) . "\n"; }); Client::publish('broadcast', [ 'type' => 'message', 'content' => 'Hello everyone!' ]);
GlobalData 数据共享
use Kode\Process\GlobalData\Client; $client = new Client('192.168.1.100:2207'); $client->online_count = 0; $client->increment('online_count', 1); echo $client->online_count;
分布式锁
use Kode\Process\GlobalData\Client; $lock = new Client('192.168.1.100:2207'); $key = 'order_lock_123'; $lock->$key = time() + 10; if ($lock->$key < time()) { unset($lock->$key); $lock->$key = time() + 10; }
协程支持
use Kode\Process\Kode; Kode::worker('http://0.0.0.0:8080', 4) ->onMessage(function ($conn, $request) { Kode::go(function () use ($conn) { $result = fetchDataFromApi(); $conn->send(json_encode($result)); }); }) ->start(); // 批量处理 $results = Kode::batch([1, 2, 3, 4, 5], fn($i) => $i * 2, 3);
定时器
use Kode\Process\Timer; Timer::add(2.5, fn() => echo "每 2.5 秒执行\n"); Timer::once(10, fn() => echo "10 秒后执行一次\n"); Timer::cron('* * * * *', fn() => echo "每分钟执行\n");
广播系统
use Kode\Process\Broadcast\Broadcaster; $broadcaster = Broadcaster::getInstance(); $broadcaster->broadcast('全局消息'); $broadcaster->broadcastToGroup('room_1', '群组消息'); $broadcaster->sendToUid('user_123', '私人消息');
队列系统
use Kode\Process\Queue\QueueManager; QueueManager::getInstance() ->register('send_email', function (array $data) { mail($data['to'], $data['subject'], $data['body']); return ['status' => 'sent']; }); QueueManager::getInstance()->dispatch('send_email', [ 'to' => 'user@example.com', 'subject' => 'Hello', 'body' => 'World' ]);
SSL/TLS
use Kode\Process\Kode; Kode::app([ 'worker_count' => 4, 'ssl' => [ 'local_cert' => '/path/to/cert.pem', 'local_pk' => '/path/to/key.pem', ] ]) ->listen('ssl://0.0.0.0:443') ->onMessage(fn($conn, $data) => $conn->send('Secure response')) ->start();
性能对比
| 指标 | Kode Process | Workerman | 提升 |
|---|---|---|---|
| HTTP QPS | 55,000+ | 45,000+ | +22% |
| WebSocket 连接 | 120,000+ | 100,000+ | +20% |
| Fiber 创建 | 139,000/s | ~100,000/s | +39% |
| 内存/进程 | ~8MB | ~10MB | -20% |
详见 性能压测
文档
项目结构
src/
├── Kode.php # 静态入口类
├── Application.php # 应用主类
├── Version.php # 版本信息
├── Protocol/ # 协议系统
│ ├── ProtocolInterface.php
│ ├── HttpProtocol.php
│ ├── WebSocketProtocol.php
│ └── ...
├── Channel/ # Channel 分布式通讯
│ ├── Server.php
│ └── Client.php
├── GlobalData/ # GlobalData 全局数据
│ ├── Server.php
│ └── Client.php
├── Broadcast/ # 广播系统
├── Queue/ # 队列系统
├── Worker/ # Worker 进程池
├── Master/ # Master 进程管理
├── Async/ # 异步工具
├── Compat/ # Workerman 兼容层
└── ...
测试
./vendor/bin/phpunit
许可证
Apache License 2.0