MixPHP 发布 v3.0.27 支持 Swow
更新内容
- 增加 Swow 支持
- 增加 WebSocket, GRPC 的 swoolecopool 进程池支持
体验 Swow
本次更新主要支持了 Swow
, 市面上唯二支持 Swow
的框架
安装
composer create-project --prefer-dist mix/api-skeleton api
运行
还没有安装 Swow 的可以参考文档先安装 Install, Swow
现在还未处于正式版可以先尝鲜体验
php bin/swow.php ____ ______ ___ _____ ___ _____ / /_ _____ / __ `__ \/ /\ \/ /__ / __ \/ __ \/ __ \ / / / / / / / /\ \/ _ / /_/ / / / / /_/ / /_/ /_/ /_/_/ /_/\_\ / .___/_/ /_/ .___/ /_/ /_/ System Name: linux PHP Version: 8.0.15 Swow Version: 0.1.0 Listen Addr: http://0.0.0.0:9501 2022-04-16 20:32:00.415403 INFO Start swow coroutine server
测试 Swow
性能
在性能上是优于 SwooleCoroutine
在未来的功能中也会支持协程Mongo, 多进程协程
wrk -c1000 -t10 http://localhost:9501
Running 10s test @ http://localhost:9501
10 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 54.09ms 2.97ms 124.98ms 97.74%
Req/Sec 1.84k 156.88 2.02k 92.32%
182698 requests in 10.08s, 9.06MB read
Socket errors: connect 0, read 830, write 0, timeout 0
Requests/sec: 18128.02
Transfer/sec: 0.90MB
体验 Swow-WebSocket
编辑 bin/swow.php
while
部分代码就可以
while (true) {
$request = null;
try {
$request = $connection->recvHttpRequest();
if (($upgrade = $request->getUpgrade()) && $upgrade === $request::UPGRADE_WEBSOCKET) {
$connection->upgradeToWebSocket($request);
while (true) {
$frame = $connection->recvWebSocketFrame();
$opcode = $frame->getOpcode();
switch ($opcode) {
case WebSocketOpcode::PING:
$connection->sendString(WebSocketFrame::PONG);
break;
case WebSocketOpcode::PONG:
break;
case WebSocketOpcode::CLOSE:
break 2;
default:
$frame = new WebSocketFrame();
$frame->setPayloadData('Hello Swow!');
$connection->sendWebSocketFrame($frame);
}
}
break;
}
$handler = $this->handler;
$handler($request, $connection);
} catch (ResponseException $exception) {
$connection->error($exception->getCode(), $exception->getMessage());
}
if (!$request || !$request->getKeepAlive()) {
break;
}
}
链接 WebSocket
发送内容 hello
收到回复 hello Swow!
通过 jmeter
测试 SwowWebSocket
的性能也是相当恐怖的
关于MixPHP
MixPHP 是一个 PHP 命令行模式开发框架;基于 Vega 驱动的 HTTP 可以同时支持 Swoole、Swow、WorkerMan、FPM、CLI-Server 生态,并且可以无缝切换。 你可以只使用 mix/vega 来搭配 laravel orm 使用;可以在任意环境中使用 mix/database 和 mix/redis;可以使用 mix/grpc 原生代码编写 gRPC;所有的模块你可以像搭积木一样随意组合。性能强劲在 TechEmpower Benchmark霸榜前十。
开箱即用, 灵活组合
当我们在本地开发时, 没有安装 Swow/Swoole
可以使用 cli/fpm
本地开发, 上线使用 Swoole/Swow/Workerman
使用框架不用担心底层切换。
支持多种服务器驱动,并且可以无缝切换。
- PHP Built-in CLI-Server 零扩展依赖 热更新 适合本机开发
- PHP-FPM 热更新 适合共享开发 适合 admin 开发
- Swoole 常驻内存 兼容 composer 生态
- Swoole Coroutine 常驻内存 协程性能强劲
- Swow 常驻内存 纯协程引擎
- WorkerMan 常驻内存 兼容 composer 生态
官网及交流
github.com/mix-php/mix (点Star支持一下)
gitee.com/mix-php/mix (点Star支持一下)