PHPackages                             fastd/swoole - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fastd/swoole

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

fastd/swoole
============

FastD swoole.

v8.0.0(1mo ago)7529.6k164MITPHPPHP &gt;=8.2CI failing

Since Jan 1Pushed 1mo ago10 watchersCompare

[ Source](https://github.com/fastdlabs/swoole)[ Packagist](https://packagist.org/packages/fastd/swoole)[ RSS](/packages/fastd-swoole/feed)WikiDiscussions master Synced today

READMEChangelog (10)Dependencies (9)Versions (38)Used By (4)

FastD Swoole
============

[](#fastd-swoole)

[![Build Status](https://camo.githubusercontent.com/53c1ffaf5bac25a9e3cfd172174cd341dcce43b38bc60103c23097bafa79aa52/68747470733a2f2f7472617669732d63692e6f72672f66617374646c6162732f73776f6f6c652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/fastdlabs/swoole)[![PHP Require Version](https://camo.githubusercontent.com/a36ed93e60420b5782989c6c5834d9b2085aab7c1a99bc36751792706a2f0b83/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344372e312d3838393242462e737667)](https://secure.php.net/)[![Swoole Require Version](https://camo.githubusercontent.com/efd6d357b944726b460b96434d2869982513e9e34c62e30c42faab0ecfe5c7b9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73776f6f6c652d253345253344342e322e302d3838393242462e737667)](http://www.swoole.com/)[![Latest Stable Version](https://camo.githubusercontent.com/97c09942e51ed5920f45f6a3ba1513ec0d26d10385b51769b55f5007b7e998a5/68747470733a2f2f706f7365722e707567782e6f72672f66617374642f73776f6f6c652f762f737461626c65)](https://packagist.org/packages/fastd/swoole)[![Total Downloads](https://camo.githubusercontent.com/f8656d493f50d995b8dd9cf7ca432dd053bff8d6cf85f1971876ba8eec7f4268/68747470733a2f2f706f7365722e707567782e6f72672f66617374642f73776f6f6c652f646f776e6c6f616473)](https://packagist.org/packages/fastd/swoole)[![Latest Unstable Version](https://camo.githubusercontent.com/0b85ce8ba1c4a0a5138df25a4f229fa12e974fe01d0fbdc7ce3d9fd7bf41640e/68747470733a2f2f706f7365722e707567782e6f72672f66617374642f73776f6f6c652f762f756e737461626c65)](https://packagist.org/packages/fastd/swoole)[![License](https://camo.githubusercontent.com/d2720286a3de425a9961bebc1837edf95a4ca943622d3c4b37042207c732b274/68747470733a2f2f706f7365722e707567782e6f72672f66617374642f73776f6f6c652f6c6963656e7365)](https://packagist.org/packages/fastd/swoole)

高性能网络服务组件. 提供底层服务封装, 基础管理及客户端调用功能. 使用 `composer` 进行管理, 可在此基础上进行封装整合.

环境要求
----

[](#环境要求)

- Linux (不考虑windows)
- swoole &gt;= 6.0
- PHP &gt;= 8.2

> 注意：代码使用了 PHP 8.2 的特性（如 readonly 属性）和 Swoole 6.0+ 的 API，确保你的环境满足这些要求。

### 版本兼容性

[](#版本兼容性)

- PHP 8.2+ 推荐使用最新版本
- Swoole 6.0+ 提供更好的性能和稳定性

源码地址: [swoole](https://github.com/swoole/swoole-src)

pecl 安装

```
pecl install swoole
```

### 安装

[](#安装)

```
composer require fastd/swoole

```

文档
--

[](#文档)

[中文文档](docs/zh_CN/readme.md)

使用
--

[](#使用)

FastD Swoole 采用事件驱动架构，使用事件监听器来处理各种服务器事件。以下是使用示例：

### HTTP 服务器

[](#http-服务器)

```
use FastD\Swoole\Server;
use FastD\Swoole\Listener\Server\RequestListener;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use FastD\Http\Response\Json;

// 创建 HTTP 请求监听器
class HttpListener extends RequestListener
{
    public function onRequest(ServerRequestInterface $serverRequest): ResponseInterface
    {
        // 处理 HTTP 请求
        $path = $serverRequest->getUri()->getPath();

        return new Json(200, [
            'message' => 'Hello, FastD Swoole!',
            'path' => $path,
            'method' => $serverRequest->getMethod(),
        ]);
    }
}

// 创建服务器实例
$server = new Server([
    'worker_num' => 4,
    'pid_file' => '/tmp/http_server.pid',
    'log_file' => '/tmp/http_server.log',
]);

// 监听 HTTP 端口
$server->listen('0.0.0.0', 9527, new HttpListener(), 'http');

// 启动服务器
$server->start();
```

### TCP 服务器

[](#tcp-服务器)

```
use FastD\Swoole\Server;
use FastD\Swoole\Listener\SwooleEventListener;
use FastD\Swoole\Event\Server\ReceiveEvent;
use FastD\Swoole\Event\SwooleEvent;

// 创建 TCP 接收监听器
class TcpListener extends SwooleEventListener
{
    public function listen(): iterable
    {
        return [
            ReceiveEvent::class,
        ];
    }

    public function process(object $event): void
    {
        if ($event instanceof SwooleEvent && $event->event == 'receive') {
            [$server, $fd, $fromId, $data] = $event->args;

            // 处理接收到的数据
            echo "Received: {$data}" . PHP_EOL;

            // 发送响应
            $server->send($fd, "Echo: {$data}");
        }
    }
}

// 创建服务器实例
$server = new Server([
    'worker_num' => 2,
    'pid_file' => '/tmp/tcp_server.pid',
]);

// 监听 TCP 端口
$server->listen('0.0.0.0', 9528, new TcpListener(), 'tcp');

// 启动服务器
$server->start();
```

### WebSocket 服务器

[](#websocket-服务器)

```
use FastD\Swoole\Server;
use FastD\Swoole\Listener\SwooleEventListener;
use FastD\Swoole\Event\SwooleEvent;

// 创建 WebSocket 监听器
class WsListener extends SwooleEventListener
{
    public function listen(): iterable
    {
        return [
            'open',
            'message',
            'close',
        ];
    }

    public function process(object $event): void
    {
        if ($event instanceof SwooleEvent) {
            switch ($event->event) {
                case 'open':
                    [$server, $request] = $event->args;
                    echo "WebSocket connected: {$request->fd}" . PHP_EOL;
                    break;

                case 'message':
                    [$server, $frame] = $event->args;
                    echo "WebSocket message from {$frame->fd}: {$frame->data}" . PHP_EOL;
                    // 广播消息
                    $server->push($frame->fd, "Server: {$frame->data}");
                    break;

                case 'close':
                    [$server, $fd] = $event->args;
                    echo "WebSocket disconnected: {$fd}" . PHP_EOL;
                    break;
            }
        }
    }
}

// 创建服务器实例
$server = new Server([
    'worker_num' => 2,
    'pid_file' => '/tmp/ws_server.pid',
]);

// 监听 WebSocket 端口
$server->listen('0.0.0.0', 9529, new WsListener(), 'ws');

// 启动服务器
$server->start();
```

### 多端口支持

[](#多端口支持)

```
use FastD\Swoole\Server;
use FastD\Swoole\Listener\Server\RequestListener;
use FastD\Swoole\Listener\SwooleEventListener;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use FastD\Http\Response\Json;

// HTTP 监听器
class HttpListener extends RequestListener
{
    public function onRequest(ServerRequestInterface $serverRequest): ResponseInterface
    {
        return new Json(200, ['message' => 'HTTP Server']);
    }
}

// TCP 监听器
class TcpListener extends SwooleEventListener
{
    public function listen(): iterable
    {
        return ['receive'];
    }

    public function process(object $event): void
    {
        if ($event->event == 'receive') {
            [$server, $fd, $fromId, $data] = $event->args;
            $server->send($fd, "TCP Server: {$data}");
        }
    }
}

// 创建服务器实例
$server = new Server([
    'worker_num' => 4,
    'pid_file' => '/tmp/multi_port_server.pid',
]);

// 监听 HTTP 端口
$server->listen('0.0.0.0', 9527, new HttpListener(), 'http');

// 监听 TCP 端口
$server->listen('0.0.0.0', 9528, new TcpListener(), 'tcp');

// 启动服务器
$server->start();
```

### 服务管理

[](#服务管理)

```
use FastD\Swoole\Server;
use FastD\Swoole\Listener\Server\RequestListener;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use FastD\Http\Response\Json;

class HttpListener extends RequestListener
{
    public function onRequest(ServerRequestInterface $serverRequest): ResponseInterface
    {
        return new Json(200, ['message' => 'Hello, FastD Swoole!']);
    }
}

$server = new Server([
    'worker_num' => 4,
    'pid_file' => '/tmp/http_server.pid',
]);

$server->listen('0.0.0.0', 9527, new HttpListener(), 'http');

// 处理命令行参数
$action = $argv[1] ?? 'start';

switch ($action) {
    case 'start':
        echo "Starting server...\n";
        $server->start();
        break;
    case 'stop':
        echo "Stopping server...\n";
        $server->stop();
        break;
    case 'reload':
        echo "Reloading server...\n";
        $server->reload();
        break;
    case 'status':
        $status = $server->status() ? 'running' : 'stopped';
        echo "Server status: {$status}\n";
        break;
    default:
        echo "Unknown action: {$action}\n";
        echo "Usage: php server.php [start|stop|reload|status]\n";
        break;
}
```

#### Process

[](#process)

```
use FastD\Swoole\Process;
use FastD\Swoole\Process\Worker;

// 创建一个工作进程
class MyWorker extends Worker
{
    public function __construct()
    {
        parent::__construct('my-worker');
    }

    public function process(Worker $worker): void
    {
        \Swoole\Timer::tick(1000, function ($id) {
            static $index = 0;
            $index++;
            echo $index . PHP_EOL;
            if ($index === 10) {
                \Swoole\Timer::clear($id);
            }
        });

        // 保持进程运行
        \Swoole\Event::wait();
    }
}

// 创建进程管理器
$process = new Process();

// 添加工作进程
$process->addWorker(new MyWorker());

// 启动进程管理器
$process->start();
```

#### Multi Process

[](#multi-process)

```
use FastD\Swoole\Process;
use FastD\Swoole\Process\Worker;

// 创建一个工作进程类
class MyWorker extends Worker
{
    public function __construct(string $name)
    {
        parent::__construct($name);
    }

    public function process(Worker $worker): void
    {
        echo "Worker {$worker->name} started with PID: " . $worker->getPid() . PHP_EOL;

        // 模拟工作
        \Swoole\Timer::tick(1000, function ($id) use ($worker) {
            static $index = 0;
            $index++;
            echo "Worker {$worker->name}: {$index}" . PHP_EOL;
            if ($index === 5) {
                \Swoole\Timer::clear($id);
            }
        });

        // 保持进程运行
        \Swoole\Event::wait();
    }
}

// 创建进程管理器
$process = new Process();

// 添加多个工作进程
for ($i = 1; $i addWorker(new MyWorker("worker-{$i}"));
}

// 启动进程管理器
$process->start();
```

#### IPC (Inter-Process Communication)

[](#ipc-inter-process-communication)

FastD Swoole 提供了三种 IPC 实现，用于进程间通信：

1. **Memory**: 基于 Swoole\\Table 的共享内存实现
2. **Queue**: 基于 Swoole\\Process\\useQueue 的消息队列实现
3. **Socket**: 基于 Swoole\\Coroutine\\Socket 的套接字实现

##### IPC 使用示例

[](#ipc-使用示例)

```
// 基本 IPC 使用示例
// 参考 examples/process/ipc_example.php

// 多进程 IPC 管理示例
// 参考 examples/process/ipc_process.php
```

##### 与 Worker 集成

[](#与-worker-集成)

```
use FastD\Swoole\Process\Worker;
use FastD\Swoole\Process\IPC\Memory;
use FastD\Swoole\Process\IPC\Queue;
use FastD\Swoole\Process\IPC\Socket;
use FastD\Swoole\Process\IPC\IPC;

// 创建带 Memory IPC 的 Worker
$memoryWorker = new Worker('memory-worker', function (Worker $worker) {
    $ipc = $worker->getIPC();
    $ipc->write('hello from memory');
    $data = $ipc->read();
    echo $data . PHP_EOL;
}, new Memory());

// 创建带 Queue IPC 的 Worker
$queueWorker = new Worker('queue-worker', function (Worker $worker) {
    $ipc = $worker->getIPC();
    $ipc->write('hello from queue');
    $data = $ipc->read();
    echo $data . PHP_EOL;
}, new Queue());

// 创建带 Socket IPC 的 Worker
$socketWorker = new Worker('socket-worker', function (Worker $worker) {
    $ipc = $worker->getIPC();
    $ipc->write('hello from socket');
    $data = $ipc->read();
    echo $data . PHP_EOL;
}, new Socket());

// 启动 Worker
$memoryWorker->start();
$queueWorker->start();
$socketWorker->start();

// 等待 Worker 结束
$memoryWorker->wait(function ($ret) {
    echo 'PID: ' . $ret['pid'] . PHP_EOL;
});

$queueWorker->wait(function ($ret) {
    echo 'PID: ' . $ret['pid'] . PHP_EOL;
});

$socketWorker->wait(function ($ret) {
    echo 'PID: ' . $ret['pid'] . PHP_EOL;
});
```

### 贡献

[](#贡献)

非常欢迎感兴趣，愿意参与其中，共同打造更好PHP生态，Swoole生态的开发者。

如果你乐于此，却又不知如何开始，可以试试下面这些事情：

- 在你的系统中使用，将遇到的问题 [反馈](https://github.com/JanHuang/fastD/issues)。
- 有更好的建议？欢迎联系  或 [新浪微博:编码侠](http://weibo.com/ecbboyjan)。

### 联系

[](#联系)

如果你在使用中遇到问题，请联系: . 微博: [编码侠](http://weibo.com/ecbboyjan)

License MIT
-----------

[](#license-mit)

###  Health Score

65

—

FairBetter than 99% of packages

Maintenance93

Actively maintained with recent releases

Popularity41

Moderate usage in the ecosystem

Community25

Small or concentrated contributor base

Maturity87

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 98.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~98 days

Recently: every ~708 days

Total

36

Last Release

36d ago

Major Versions

1.1.x-dev → v2.0.0-beta12017-03-17

v2.0.4 → 5.0.x-dev2020-03-26

5.0.x-dev → v8.0.02026-05-28

PHP version history (3 changes)v1.0.0-alpha1PHP &gt;=5.6

5.0.x-devPHP &gt;=7.2.0

v8.0.0PHP &gt;=8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/94c2bc821caf23977e1c3deea85e3cbc9a73a632e1afaf778638f7fe9da1c42b?d=identicon)[JanHuang](/maintainers/JanHuang)

---

Top Contributors

[![JanHuang](https://avatars.githubusercontent.com/u/7090871?v=4)](https://github.com/JanHuang "JanHuang (453 commits)")[![RunnerLee](https://avatars.githubusercontent.com/u/7436388?v=4)](https://github.com/RunnerLee "RunnerLee (5 commits)")[![longxinH](https://avatars.githubusercontent.com/u/12230340?v=4)](https://github.com/longxinH "longxinH (3 commits)")[![samnela](https://avatars.githubusercontent.com/u/1852108?v=4)](https://github.com/samnela "samnela (1 commits)")

---

Tags

fastdhttppeclphpserverswooleswoole-extensionswoole-httpswoole-tcpswoole-udpswoole-websocket

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/fastd-swoole/health.svg)

```
[![Health](https://phpackages.com/badges/fastd-swoole/health.svg)](https://phpackages.com/packages/fastd-swoole)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[phel-lang/phel-lang

Phel is a functional programming language that compiles to PHP

5186.0k18](/packages/phel-lang-phel-lang)[dagger/dagger

Dagger PHP SDK

261.1k](/packages/dagger-dagger)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
