Swoole v4.8.0 版本发布,增加 Swoole Dashboard 面板

简介: 此版本包含了新功能、BUG 修复以及向下不兼容的改动。

距离上个版本v4.7.1发布近两个月了,v4.8.0 版本终于发布了。

此版本包含了新功能、BUG 修复以及向下不兼容的改动。


不兼容改动


在 base 模式下,onStart 回调将始终在第一个工作进程 (worker id 为 0) 启动时回调,先于 onWorkerStart 执行。在 onStart 函数中始终可以使用协程 API,Worker-0 出现致命错误重启时,会再次回调 onStart

在之前的版本中,onStart 在只有一个工作进程时,会在 Worker-0 中回调。有多个工作进程时,在 Manager 进程中执行。


admin_server


在此版本中重要的功能就是增加了admin_server的选项,用于提供 API 服务,可以用于在 Swoole Dashboard 面板中查看当前服务的信息,例如 PHP 加载的扩展、文件、类、函数、常量,以及 Swoole 相关的进程、协程、连接信息等。

//创建Server对象,监听 127.0.0.1:9501 端口
$server = new Swoole\Server('127.0.0.1', 9501);
$server->set([
    'admin_server' => '0.0.0.0:9502', // 启用 admin_server 服务
    'worker_num' => 2,
    'task_worker_num' => 3
]);
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
    echo "Client: Connect.\n";
});
//监听数据接收事件
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
    $server->send($fd, "Server: {$data}");
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
    echo "Client: Close.\n";
});
//启动服务器
$server->start();

可以在更新 Swoole v4.8.0 版本后,前往 https://dashboard.swoole.com/ 进行体验。

在登录时配置本地的admin_server地址或者云端的地址,形如:http://127.0.0.1:9502/ ,登录后也可以在右上角配置其他地址。

注:少数功能受限,需要安装ext-swoole_plus

另外还增加了一些新的 API:Table::statsCoroutine::join等,下面来具体看一下:


Coroutine::join


并发执行多个协程。

Swoole\Coroutine::join(array $cid_array, float $timeout = -1): bool

$timeout为总的超时时间,超时后会立即返回。但正在运行的协程会继续执行完毕,而不会中止

use Swoole\Coroutine;
use function Swoole\Coroutine\go;
use function Swoole\Coroutine\run;
run(function () {
    $status = Coroutine::join([
        go(function () use (&$result) {
            $result['baidu'] = strlen(file_get_contents('https://www.baidu.com/'));
        }),
        go(function () use (&$result) {
            $result['zhihu'] = strlen(file_get_contents('https://www.zhihu.com/'));
        })
    ], 1);
    var_dump($result, $status);
});

addCommand/command


Swoole Dashboard 的 API 就是基于addCommand提供的,代码位于 library 中,除了 library 中提供的command,swoole 扩展中也有一些。

当然也可以自定义:

Swoole\Server->addCommand(string $name, int $accepted_process_types, callable $callback)
$server->addCommand('test_getpid', SWOOLE_SERVER_COMMAND_MASTER | SWOOLE_SERVER_COMMAND_EVENT_WORKER,
    function ($server) {
        return json_encode(['pid' => posix_getpid()]);
});

command方法用于在 server 中调用定义的接口:

Swoole\Server->command(string $name, int $process_id, int $process_type, $data, bool $json_decode = true)
$server->command('test_getpid', 0, SWOOLE_SERVER_COMMAND_MASTER, ['type' => 'master']);


onBeforeShutdown


新增onBeforeShutdown事件回调,在此回调中可以使用协程 API。

  • 安全提示

onStart回调中可以使用异步和协程的 API,但需要注意这可能会与dispatch_funcpackage_length_func存在冲突,请勿同时使用


Coroutine::getStackUsage()


获取当前 PHP 栈的内存使用量。

Swoole\Coroutine::getStackUsage([$cid]): int

Table::stats

用来获取 Swoole\Table 状态。

use Swoole\Table;
$table = new Table(1024);
$table->column('string', Table::TYPE_STRING, 256);
$table->create();
$table->set('swoole', ['string' => 'www.swoole.com']);
var_dump($table->stats());
//array(8) {
//  ["num"]=>
//  int(1)
//  ["conflict_count"]=>
//  int(0)
//  ["conflict_max_level"]=>
//  int(0)
//  ["insert_count"]=>
//  int(1)
//  ["update_count"]=>
//  int(0)
//  ["delete_count"]=>
//  int(0)
//  ["available_slice_num"]=>
//  int(204)
//  ["total_slice_num"]=>
//  int(204)
//}

更新日志


下面是完整的更新日志:

向下不兼容改动

  • 在 base 模式下,onStart 回调将始终在第一个工作进程 (worker id 为 0) 启动时回调,先于 onWorkerStart 执行 (#4389) (@matyhtf)

新增 API

  • 新增 Coroutine::getStackUsage() 方法 (#4398) (@matyhtf) (@twose)
  • 新增 Coroutine\Redis 的一些 API (#4390) (@chrysanthemum)
  • 新增 Table::stats() 方法 (#4405) (@matyhtf)
  • 新增 Coroutine::join() 方法 (#4406) (@matyhtf)

新增功能

  • 支持 server command (#4389) (@matyhtf)
  • 支持 Server::onBeforeShutdown 事件回调 (#4415) (@matyhtf)

增强

  • 当 Websocket pack 失败时设置错误码 (swoole/swoole-src@d27c5a5) (@matyhtf)
  • 新增 Timer::exec_count 字段 (#4402) (@matyhtf)
  • hook mkdir 支持使用 open_basedir ini 配置 (#4407) (@NathanFreeman)
  • library 新增 vendor_init.php 脚本 (swoole/library@6c40b02) (@matyhtf)
  • SWOOLE_HOOK_CURL 支持 CURLOPT_UNIX_SOCKET_PATH (swoole/library#121) (@sy-records)
  • Client 支持设置 ssl_ciphers 配置项 (#4432) (@amuluowin)
  • Server::stats() 添加了一些新的信息 (#4410) (#4412) (@matyhtf)

修复

  • 修复文件上传时,对文件名字进行不必要的 URL decode (swoole/swoole-src@a73780e) (@matyhtf)
  • 修复 HTTP2 max_frame_size 问题 (#4394) (@twose)
  • 修复 curl_multi_select bug #4393 (#4418) (@matyhtf)
  • 修复丢失的 coroutine options (#4425) (@sy-records)
  • 修复当发送缓冲区满的时候,连接无法被 close 的问题 (swoole/swoole-src@2198378) (@matyhtf)
目录
相关文章
|
1天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
7598 32
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
1天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
654 144
|
1天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
|
1天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1269 2
|
1天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1173 1
|
1天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1318 4
|
1天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
413 4
|
1天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
357 1
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图