Swoole v4.6.2 版本发布,Bug 修复版本

简介: v4.6.2 版本主要是一个 Bug 修复版本,没有向下不兼容改动。

新增了 Coroutine\Socket->recvLine()Coroutine\Socket->readWithBuffer() 方法

分别用于解决 socket_read 兼容性问题和使用 recv(1) 逐字节接收时产生大量系统调用问题

同时增强了 Response\create() 方法,可以独立于 Server 使用,如:

use Swoole\Coroutine\Server;
use Swoole\Coroutine\Server\Connection;
use Swoole\Http\Request;
use Swoole\Http\Response;
Swoole\Coroutine\run(function () {
    $server = new Server('0.0.0.0', 9501, false);
    go(function () use ($server) {
        $server->handle(function (Connection $conn) use ($server) {
            $req = Request::create();
            while(true) {
                $data = $conn->recv();
                if (strlen($data) != $req->parse($data) or $req->isCompleted()) {
                    break;
                }
            }
            var_dump($req->get);
            $resp = Response::create([$conn->exportSocket(), $req]);
            $resp->header('X-Server', 'swoole');
            $resp->end('Hello, Swoole');
            $server->shutdown();
        });
        $server->start();
    });
});

启动后使用 curl 发起请求


$ curl -I http://127.0.0.1:9501/\?hello\=swoole
HTTP/1.1 200 OK
X-Server: swoole
Server: swoole-http-server
Connection: keep-alive
Content-Type: text/html
Date: Mon, 25 Jan 2021 10:58:31 GMT
Content-Length: 13
$ curl http://127.0.0.1:9501/\?hello\=swoole
Hello, Swoole

而终端会打印请求中的 GET 参数


array(1) {
  ["hello"]=>
  string(6) "swoole"
}

下面是完整的更新日志:

新增 API


  • 新增 Http\Request\getMethod() 方法 (#3987) (@luolaifa000)
  • 新增 Coroutine\Socket->recvLine() 方法 (#4014) (@matyhtf)
  • 新增 Coroutine\Socket->readWithBuffer() 方法 (#4017) (@matyhtf)

增强


  • 增强 Response\create() 方法,可以独立于 Server 使用 (#3998) (@matyhtf)
  • 支持 Coroutine\Redis->hExists 在设置了 compatibility_mode 之后返回 bool 类型 (swoole/swoole-src@b8cce7c) (@matyhtf)
  • 支持 socket_read 设置 PHP_NORMAL_READ 选项 (swoole/swoole-src@b1a0dcc) (@matyhtf)

修复


  • 修复 Coroutine::defer 在 PHP8 下 coredump 的问题 (#3997) (@huanghantao)
  • 修复当使用 thread context 的时候,错误设置 Coroutine\Socket::errCode 的问题 (swoole/swoole-src@004d08a) (@matyhtf)
  • 修复在最新的 macos 下 Swoole 编译失败的问题 (#4007) (@matyhtf)
  • 修复当 md5_file 参数传入 url 导致 php stream context 为空指针的问题 (#4016) (@ZhiyangLeeCN)

内核


  • 使用 AIO 线程池 hook stdio(解决之前把 stdio 视为 socket 导致的多协程读写问题) (#4002) (@matyhtf)
  • 重构 HttpContext (#3998) (@matyhtf)
  • 重构 Process::wait() (#4019) (@matyhtf)
目录
相关文章
|
11月前
|
Web App开发 前端开发 测试技术
构建响应式设计的七个最佳实践
本文介绍了构建响应式设计的七个最佳实践,包括使用流体布局、媒体查询、灵活的图片和媒体、响应式框架、可伸缩的字体、测试与优化及渐进增强和优雅降级,帮助开发者创建适应多设备的网站。
|
6月前
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
2820 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
机器学习/深度学习 算法 数据挖掘
算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
**摘要:** 了解9种距离和相似度算法:欧氏距离、余弦相似度、汉明距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、雅卡尔指数、半正矢距离和Sørensen-Dice系数。这些算法在机器学习、文本分析、图像处理和生物学等领域各有应用。例如,欧氏距离用于KNN和K-Means,余弦相似度用于文本相似性,汉明距离在错误检测中,曼哈顿距离在数据挖掘,切比雪夫距离在棋盘游戏,闵可夫斯基距离通过调整参数适应不同场景,雅卡尔指数和Sørensen-Dice系数用于集合相似度。每种算法有其优缺点,如欧氏距离对异常值敏感,余弦相似度忽略数值大小,汉明距离仅适用于等长数据。
486 2
算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
|
数据采集 运维 算法
大数据项目管理:从需求分析到成果交付的全流程指南
【4月更文挑战第9天】本文介绍了大数据项目从需求分析到成果交付的全过程,包括需求收集与梳理、可行性分析、项目规划、数据准备与处理、系统开发与集成,以及成果交付与运维。文中通过实例展示了如何进行数据源接入、数据仓库建设、系统设计、算法开发,同时强调了需求理解、知识转移、系统运维的重要性。此外,还提供了Python和SQL代码片段,以说明具体技术实现。在大数据项目管理中,需结合业务和技术,灵活运用这些方法,确保项目的成功执行和价值实现。
3187 1
|
11月前
|
Java 程序员
面试高频考点!关于构造方法的那些事儿
本文介绍了Java中的构造方法,包括其基本概念、默认构造方法、构造方法的重载、构造方法的细节以及执行顺序。通过具体示例,详细解释了构造方法在对象初始化中的重要作用,帮助读者在面试中更好地应对相关问题。
120 1
|
算法 Python
NumPy 高级教程——性能优化
NumPy 高级教程——性能优化 【1月更文挑战第2篇】
641 0
|
域名解析 网络协议 Linux
修改centos等linux的hostname-永久生效
修改centos等linux的hostname-永久生效
1297 0
uniapp确认提示框;uniapp判断输入框值是否符合正常手机号,身份证号
uniapp确认提示框;uniapp判断输入框值是否符合正常手机号,身份证号
906 0
|
测试技术 API 数据库
微服务架构基础——解读六边形架构
追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.cockburn.us/Hexagonal+architecture, 读原文,译重点,记感受, 如下: 六边形架构的意图 采用同等的方式,应用可以通过用户,程序,自动化测试或批处理脚本来驱动,而独立于最终的运行环境及数据库进行开发和测试。
2655 0