Swoole v4.8.0 版本发布,增加 Swoole Dashboard 面板
距离上个版本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::stats
、Coroutine::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_func
和package_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)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【高手问答汇总】游戏服务器十问,《百万在线》作者倾情作答
服务器开发并不简单,大型游戏服务器的开发更难。比起Web服务器,市面上没有很通用的游戏服务器框架,很多底层功能都需要开发者自己实现,它涉及网络编程,数据库优化,多线程调度等等。而且,游戏的业务与web业务有很大不同,不同类型的游戏对应的服务器结构也不同,内容很多。 OSCHINA特邀《百万在线》的作者@罗培羽 和大家一起聊聊游戏服务器设计相关的问题,在此,我们整理了活动中最有意思的十个问题,与大家分享。 嘉宾简介 罗培羽,任职于广州四三九九公司,负责游戏研发和技术研究工作。专著《Unity3D网络游戏实战(第2版)》被国内多家高校的软件工程专业选做教材。 2021年新作《百万在线:大型游戏服务端开发》以巧妙的章节构思大大降低游戏行业服务端岗位的进入门槛,广受好评,上市两周即荣登京东游戏类新书版TOP1。 问题1:游戏服务器开发是不是使用c/cpp,而电商一般使用java? 答:游戏服务端使用的语言白花齐放,主流看大厂,腾讯用的是cpp,网易cpp+python,阿里游戏cpp+lua,4399用erlang和cpp+lua,所以总体上看cpp方案居多。其他的golang、nodejs、...
- 下一篇
谷歌云将向用户展示他们在使用云计算时的碳足迹
10月14日消息,据外媒报道,谷歌云近日宣布了一个新的免费功能,将为用户提供自定义的碳足迹报告,详细说明云计算应用产生的碳排放。 谷歌云一直表示,希望到2030年100%使用无碳能源。该公司已经将其能源使用与可再生能源购买相匹配。但不仅仅是谷歌云,事实上,今天每个企业都在寻求如何实现其排放目标。然而,要量化云计算在这方面的作用是出了名的困难,所以这里的想法是让企业更容易报告其云使用对环境的影响,包括内部和外部。 “客户可以按项目、产品和地区监控他们的云排放,用帮助他们减少碳足迹的指标来授权IT团队和开发人员。数字基础设施排放实际上只是它们的环境足迹的一部分,但考虑碳排放是必要的,以衡量它们各自的碳减排目标的进展。”谷歌云首席技术官Jenn Bennett说。 正如Bennett所指出的那样,一旦公司有了准确的报告,下一步自然就会为如何减少气候影响提供建议。具体来说,这意味着在谷歌云的无人参与项目推荐中增加碳估算,帮助客户减少闲置资源的数量,并在其主动协助推荐中增加可持续性影响类别。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7,CentOS8安装Elasticsearch6.8.6
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- MySQL8.0.19开启GTID主从同步CentOS8