- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Swoole 1.10.0新版本发布,增加了多项新特性由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。最近,PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 1.10.0 版本。此版本增加了多项新特性。下面话不多说了,来一起看看详细的介绍吧.
自动 DNS 解析 。
新版本的异步客户端不再需要使用 swoole_async_dns_lookup 解析域名了,底层实现了自动域名解析。Client 在执行 connect 方法时可直接传入域名.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$client
=
new
swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client
->on(
"connect"
,
function
(swoole_client
$cli
) {
$cli
->send(
"GET / HTTP/1.1\r\n\r\n"
);
});
$client
->on(
"receive"
,
function
(swoole_client
$cli
,
$data
){
echo
"Receive: $data"
;
$cli
->send(
str_repeat
(
'A'
, 100).
"\n"
);
sleep(1);
});
$client
->on(
"error"
,
function
(swoole_client
$cli
){
echo
"error\n"
;
});
$client
->on(
"close"
,
function
(swoole_client
$cli
){
echo
"Connection close\n"
;
});
//底层会自动进行异步域名解析
$client
->connect(
'www.baidu.com'
, 9501);
|
慢请求日志 。
新版本增加了追踪慢请求功能,可记录慢请求的 PHP 函数调用栈.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function
test()
{
test_sleep();
}
function
test_sleep()
{
echo
"sleep 5\n"
;
sleep(5);
}
$server
=
new
swoole_server(
'127.0.0.1'
, 9501);
$server
->set([
'worker_num'
=> 1,
'task_worker_num'
=> 1,
'trace_event_worker'
=> true,
'request_slowlog_timeout'
=> 1,
'request_slowlog_file'
=>
'/tmp/trace.log'
,
]);
$server
->on(
'Receive'
,
function
(
$serv
,
$fd
,
$reactor_id
,
$data
) {
test();
$serv
->send(
$fd
,
"Swoole: $data"
);
});
$server
->start();
|
处理慢请求后,/tmp/trace.log日志中将打印一行错误信息:
1
2
3
4
5
6
|
[08-Jan-2018 15:21:57] [worker#0] pid 26905
[0x00007f60cda22340] sleep() /home/htf/workspace/swoole/examples/server/trace.php:10
[0x00007f60cda222e0] test_sleep() /home/htf/workspace/swoole/examples/server/trace.php:4
[0x00007f60cda22280] test() /home/htf/workspace/swoole/examples/server/trace.php:28
[0x00007f60cda22190] {closure}() /home/htf/workspace/swoole/examples/server/trace.php:42
[0x00007f60cda22140] start() /home/htf/workspace/swoole/examples/server/trace.php:42
|
新增 STREAM 模块 。
新增的 stream 模块使得 Reactor、Worker、Task 进程之间的通信方式更灵活,最大程度地解耦。复杂的线上项目使用 stream 模式,请求分配调度的效率更高.
1
2
3
4
5
6
7
8
9
10
11
|
$serv
=
new
swoole_server(
"127.0.0.1"
, 9501);
$serv
->set(
array
(
'dispatch_mode'
=> 7,
'worker_num'
=> 2,
));
$serv
->on(
'receive'
,
function
(swoole_server
$serv
,
$fd
,
$threadId
,
$data
)
{
var_dump(
$data
);
echo
"#{$serv->worker_id}>> received length="
.
strlen
(
$data
) .
"\n"
;
});
$serv
->start();
|
增加 Event::cycle 函数 。
用户代码可自定义一个 EventLoop 的钩子函数,此函数会在每一轮事件循环结束时调用。方便使用 Generator + Yield 或 Promise 类 Swoole 框架实现自己的调度器.
1
2
3
4
5
6
7
8
9
10
|
Swoole\Timer::tick(2000,
function
(
$id
) {
var_dump(
$id
);
});
Swoole\Event::cycle(
function
() {
echo
"hello [1]\n"
;
Swoole\Event::cycle(
function
() {
echo
"hello [2]\n"
;
Swoole\Event::cycle(null);
});
});
|
其他更新内容 。
更新Table::incr和Table::decr支持有符号整型 。
兼容PHP-7.2版本 。
修复Event::del函数无法移除标准输入句柄的问题 。
修复Task进程内定时器间隔小于Client接收超时时间,引起Client::recv死锁的问题 。
增加ssl_host_name配置项,用于验证SSL/TLS主机合法性 。
使用dispatch_mode = 3时,当所有Worker为忙的状态时打印一条错误日志 。
增加端口迭代器,可遍历某个监听端口的所有连接 。
修复Table在非x86平台存在的内存对齐问题 。
修复BASE模式下max_request配置无效的问题 。
修复WebSocket服务器在某些客户端ping帧带有mask数据时回包错误的问题 。
修复HttpClient使用HEAD方法响应内容携带Content-Length导致卡死的问题 。
增加MySQL异步客户端对JSON格式的支持 。
下载地址 。
GITHUB:https://github.com/swoole/swoole-src/releases/tag/v1.10.0 。
开源中国:https://gitee.com/swoole/swoole/tree/v1.10.0/ 。
PECL:https://pecl.php.net/package/swoole/1.10.0 。
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.
最后此篇关于Swoole 1.10.0新版本发布,增加了多项新特性的文章就讲到这里了,如果你想了解更多关于Swoole 1.10.0新版本发布,增加了多项新特性的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 C#特性 1. 概括 2. 语法 定义特性类 应用特性
是否有关于 Python 语言必须提供哪些功能的文章/论文?为什么应该使用 Python 而不是任何其他语言? Python 的优点和缺点是什么? 最佳答案 Why Python和 Why Pytho
我想弄清楚为什么 .x比*.x具有更高的特异性当后者有望获胜时。 不是*.x应该具有 0-0-1-1 的特异性(1 个类,1 个标签)而 .x只是一个类(class) 0-0-1-0 ? 考虑以下基本
在尝试评估非 instanceof 条件时,我发现了我在 Groovy 2.4.7、1.6.0 JVM 中没有预料到的行为。 总之: class Foo { static Boolean
当使用可变结构和属性时,编译器可以解决一些问题,但不能对其他相当明显的事情做同样的事情,这对我来说似乎很奇怪。 以下面的自动属性为例: Vector2 Vector { get; set; } 而不是
我对 ES3 有一定的了解,但我对 ES5 的特性不是很了解。我 - 或多或少 - 知道: Object.create(), Object.freeze() “使用严格” getter 和 sette
我最近开始将 Django 1.5.4 用于带有 MySQL 后端的 Web 应用程序。就在一开始,我遇到了某些限制,这让我想知道 Django 是否是继续前进的正确方法。 一些明显的缺点是: 缺少复
在函数模板的定义中,模板参数的实例化一般是未知的。类型特征可用于在编译时获取一些信息。例如,这是 is_pointer 的一个简单应用: template void foo(T p) { cout
我正在设计页面的样式,该页面具有除最后一个框外的带底部边框的连续框。我为所有框应用类 .box 并添加 .box_last 以仅隐藏最后一个框的边框。 .box { border-bottom-s
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有兴趣编制一份不建议在嵌入式系统中使用的 c++ 功能列表(这可能会导致人们推荐使用 c 而不是 c++)。如果您知道,请尝试添加原因,或者将您的原因添加到其他人的答案中。 这是一个开始(我知道的唯
作为一名 Ruby 程序员,您是否曾觉得任何使用起来有点冒险的功能,可能是因为它的奇怪行为?它可能有很好的文档记录,但在调试时很难找到,或者难以记住? 我通常尽量远离 String#gsub!。文档说
我正在开发一个连接到健身 watch 的蓝牙应用程序。这是我第一次使用蓝牙。我设法使用出色的 FlutterBlue 将我的应用程序与设备连接起来图书馆。 但是我无法理解我从阅读中获得的结果。这是我阅
1. 迭代器(Iterator)的介绍 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。 定义:迭代器是一种检
嗨,伙计们,有没有动态更改 Spring 属性文件内容的好例子?如果您能给我一些示例或链接,我将不胜感激。 非常感谢 最佳答案 我想你可以使用 ReloadableResourceBundleMess
SystemVerilog 引入了一些非常有用的结构来改进编码风格。然而,正如我的一位同事经常说的,“你不是在写软件,你是在描述硬件。”考虑到这一点,当最终结果需要合成时,应该避免语言的哪些特征?这个
我定义了这些测试依赖项 / Test Dependencies lazy val wiremock = "com.github.tomakehurst" % "wir
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我有兴趣提高我的设计能力(设计具有属性、方法等的类)。即如何决定类、方法和属性应该是什么? 你们能建议我改进这个的好 Material 吗? 最佳答案 请看: Any source of good o
我是一名优秀的程序员,十分优秀!