huang-yi / laravel-swoole-http
基于 Swoole 的高性能 HTTP/WebSocket 服务器。加速您的 Laravel 和 Lumen 应用程序。
Requires
- ext-swoole: >=1.9.5
- huang-yi/swoole-watcher: 0.0.*
- illuminate/console: ~5.2
- illuminate/contracts: ~5.2
- illuminate/events: ~5.2
- illuminate/http: ~5.2
- illuminate/pipeline: ~5.2
- illuminate/redis: ~5.2
- illuminate/support: ~5.2
- league/flysystem: ^1.0
Requires (Dev)
- illuminate/routing: ~5.2
- phpunit/phpunit: ~6.0
This package is auto-updated.
Last update: 2020-05-08 13:22:08 UTC
README
基于 Swoole 的高性能 HTTP 服务器。现在,它也支持 WebSocket 服务器。
翻译
要求
- Laravel/Lumen 5.2+
- ext-swoole 1.9.5+
- ext-inotify (可选)
安装与设置
- 此包可以通过 composer 安装
$ composer require huang-yi/laravel-swoole-http
- 注册服务提供者(可选)
如果您的 Laravel 版本低于 5.5 或您正在使用 Lumen,则需要手动注册服务提供者
<?php // Framework: Laravel // File: config/app.php [ 'providers' => [ HuangYi\Swoole\SwooleServiceProvider::class, ], ];
<?php // Framework: Lumen // File: bootstrap/app.php $app->register(HuangYi\Swoole\SwooleServiceProvider::class);
- 配置
运行此命令以发布配置文件
$ php artisan vendor:publish --provider="HuangYi\Swoole\SwooleServiceProvider"
点击此处获取有关 配置 的更多信息。
- 启动服务器
运行此命令以启动服务器
php artisan swoole:server
然后,您可以通过 http://127.0.0.1:1215 访问您的网站。
点击此处获取有关 命令 的更多信息。
配置
驱动
此选项控制创建服务器时使用的默认 "驱动"。
支持的: "http","websocket"
主机
服务器的 IP 地址。
端口
服务器的端口。
选项
Swoole 服务器的配置。更多信息请参阅 官方文档。
注意:如果您使用 task,则
task_worker_num
的值必须大于 0。
重置
此选项控制每个请求后需要重置的实例。这有助于开发人员避免由单例引起的诸如 auth
之类的问题。
消息解析器
WebSocket 消息解析器。您可以替换此选项为自定义解析器。
注意:自定义解析器必须实现
HuangYi\Swoole\Contracts\ParserContract
。
Redis
connection
:指定一个 Redis 连接以存储 WebSocket 房间和客户端。prefix
:设置 Redis 键的前缀。
表格
定义swoole表结构
<?php [ 'tables' => [ [ 'name' => 'users', 'size' => 1024, 'columns' => [ ['id', 'int', 8], ['nickname', 'string', 255], ['score', 'float'] ], ], ], ];
name
:指定表名。size
:定义最大行数。columns
:定义表的列。格式:[列名
,列类型
,列长度
]。列类型:int
、integer
、string
、varchar
、char
、float
。
点击此处了解更多关于表的信息。
watcher
文件监视配置。
directories
:定义正在监视的目录列表;
excluded_directories
:定义不监视的目录列表;
suffixes
:定义正在监视的文件后缀列表。
命令
此包提供了一个 artisan 命令来管理 swoole 服务器。
php artisan swoole:server
此命令有一个 "action" 参数,默认值为 "start"。
操作 | 描述 |
---|---|
start | 启动 swoole 服务器。 |
stop | 停止 swoole 服务器。 |
reload | 重新加载 swoole 服务器。 |
restart | 重新启动 swoole 服务器。 |
watch | 进入监视模式。当监视的文件发生变化时,swoole 服务器将自动重新加载。 |
注意:swoole 服务器只能在 cli 环境下运行。
表
Swoole Table 可以帮助开发者在工作进程之间共享数据。您可以在配置文件中定义表结构。
<?php use HuangYi\Swoole\Facades\Table; // Insert a record. Table::use('users')->set(1, ['id' => 1, 'nickname' => 'Bob', 'score' => 9.5]); // Query a record. $bob = Table::use('users')->get(1); $nickname = Table::use('users')->get(1, 'nickname'); // Truncate a table. Table::truncate('users');
点击此处了解更多关于Swoole 表的信息。
任务
定义一个任务
<?php use HuangYi\Swoole\Contracts\TaskContract; use Illuminate\Support\Facades\Mail; class SendMailTask implements TaskContract { /** * @var array $mail */ protected $mail; /** * Mail task * * @var array $mail * @return void */ public function __construct(array $mail) { $this->mail = $mail; } /** * Task handler. * * @param \Swoole\Server $server * @param int $taskId * @param int $srcWorkerId * @return void */ public function handle($server, $taskId, $srcWorkerId) { Mail::to($this->mail['to'])->send($this->mail['view'], $this->mail['data']); } }
将任务发送到任务工作进程
<?php $task = new SendMailTask([ 'to' => 'bob@mail.com', 'view' => 'mail', 'data' => [], ]); app('swoole.server')->task($task);
注意:要启动任务工作进程,必须将
task_worker_num
的值设置为大于 0。
Nginx
server { listen 80; server_name your.domain; root /path/to/laravel/public; index index.php; location = /index.php { # Ensure that there is no such file named "not_exists" in your "public" directory. try_files /not_exists @swoole; } location / { try_files $uri $uri/ @swoole; } location @swoole { set $suffix ""; if ($uri = /index.php) { set $suffix "/"; } proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:1215$suffix; } }
注意:将 swoole 服务器(默认为 127.0.0.1)的 IP 地址添加到中间件
App\Http\Middleware\TrustProxies
。
提示
- 请勿使用以下函数:
sleep()
、exit()
、die()
。 - 注意单例。