1. Go to this page and download the library: Download fastd/swoole library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
fastd / swoole example snippets
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();
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();
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;
}
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();
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 <= 5; $i++) {
$process->addWorker(new MyWorker("worker-{$i}"));
}
// 启动进程管理器
$process->start();