Swoole 1.10.0新版本发布,增加了多项新特性

前言

Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。最近,PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 1.10.0 版本。此版本增加了多项新特性。下面话不多说了,来一起看看详细的介绍吧。

自动 DNS 解析

新版本的异步客户端不再需要使用 swoole_async_dns_lookup 解析域名了,底层实现了自动域名解析。Client 在执行 connect 方法时可直接传入域名。

$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 函数调用栈。

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日志中将打印一行错误信息:

[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 模式,请求分配调度的效率更高。

$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();
  • Reactor 和 Worker 之间通信,使用 dispatch_mode = 7 来开启
  • Worker 和 Task 之间通信,使用 task_ipc_mode = 4 来开启

增加 Event::cycle 函数

用户代码可自定义一个 EventLoop 的钩子函数,此函数会在每一轮事件循环结束时调用。方便使用 Generator + Yield 或 Promise 类 Swoole 框架实现自己的调度器。

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

本地下载:http://xiazai.jb51.net/201801/yuanma/swoole-src-1.10.0(jb51.net).rar

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 使用swoole扩展php websocket示例

    复制代码 代码如下: <?phpdefine('DEBUG', 'on');define("WEBPATH", str_replace("\\","/", __DIR__));require __DIR__ . '/../libs/lib_config.php'; class WebSocket extends Swoole\Network\Protocol\WebSocket{    /**     * 下线时,通知所有人     */ 

  • Swoole-1.7.22 版本已发布,修复PHP7相关问题

    swoole-1.7.22 版本已发布,此版本是一个BUG修复版本,专门针对PHP7做了大量修改,可完美运行于PHP7环境. 更新内容如下: 修复PHP7下HttpServer发生内存泄漏的问题 修复PHP7下core dump的问题 修复swoole_table->del出现错误的问题(重要问题) 增加swoole_client->send/recv的socket参数选项 增加swoole_async_set新配置socket_dontwait/socket_buffer_size/enab

  • 初识PHP中的Swoole

    Swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率.最少的性能损耗,换取最大的开发效率.利用Swoole框架,开发一个复杂的Web功能,可以在很短的时间内完成. 官方定义: Swoole:重新定义PHP PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询. Swo

  • php安装swoole扩展的方法

    本文实例讲述了php安装swoole扩展的方法.分享给大家供大家参考.具体如下: 我本机是OS X,想要安装swoole体验一下,于是: 复制代码 代码如下: andy@AndyMacBookPro:/usr/local/webdata/github$ cd swoole-src/ andy@AndyMacBookPro:/usr/local/webdata/github/swoole-src$ git pull Already up-to-date. andy@AndyMacBookPro:/

  • php异步多线程swoole用法实例

    本文实例讲述了php异步多线程swoole用法.分享给大家供大家参考.具体分析如下: swoole重新定义PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务,下面的实例就可以证实这一功能. 一般来说,Swoole提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询. swoole以前听过, 拿来做游戏服务器简直是神器-今天稍微的感受了一下,  在 ubuntu 下搭建了

  • Swoole 1.10.0新版本发布,增加了多项新特性

    前言 Swoole 可以广泛应用于互联网.移动通信.企业软件.云计算.网络游戏.物联网(IOT).车联网.智能家居等领域.使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品.最近,PHP的异步.并行.高性能网络通信引擎 Swoole 已发布 1.10.0 版本.此版本增加了多项新特性.下面话不多说了,来一起看看详细的介绍吧. 自动 DNS 解析 新版本的异步客户端不再需要使用 swoole_async_dns_lookup 解析域名

  • Java11 发布前抓紧掌握这些新特性

    快速回顾 1.Lambda表达式: (参数) -> {主体} Lambda表达式打开了函数式编程爱好者继续使用Java的大门.Lambda表达式需要零个或多个参数,这些参数可以在表达式主体中访问,并随计算结果一起返回. Comparator<Integer> comparator = (a, b) -> a-b; System.out.println(comparator.compare(3, 4)); // -1 2. 函数接口:只有一种方法的接口 lambda表达式本身被视为可

  • Android 7.0 Nougat不得不知的11项新功能

    最近 Google 已经发布 Android 新版本 7.0 Nougat (牛轧糖) ,相信Android手机用户在未来的几个月内会收到第三方手机制造商推送的系统升级,无论你是已经下载升级的幸运者,还是焦急等待更新的用户,Android 7.0 Nougat 都有一些很棒的功能值得尝试,下面是11 项 在 Android 7.0 Nougat 系统中不可错过的功能. 1) 同时运行多个应用 Android 终于正式地支持分屏模式,通过分屏模式可以同时打开两个应用,这个功能在平板上使用起来特别方

  • 简单了解Spring Framework5.0新特性

    SpringFramework5.0是自2013年12月版本4发布之后SpringFramework的第一个主发行版.SpringFramework项目的领导人JuergenHoeller于2016年7月28日宣布了第一个SpringFramework5.0里程碑版本(5.0M1). 现在,将近一年的时间过去以后,我们期盼已久的RC3版本将于2017年7月18日发行.这是路线图规划中SpringFramework5.0首个GA发行版的最后一次发行. 从高层来看,SpringFramework5.

  • Android 7.0新特性详解

    谷歌正式在I/O大会现场详细介绍了有关Android 7.0的大量信息.目前,我们已经知道,新一代Android操作系统将支持无缝升级,能够通过Vulkan API来在中低硬件配置设备上实现流 畅.游戏体验以及更多的Emoji表情.不过,Android 7.0最大也是最引人关注的还是来自运行效率上的改进. 来自I/O大会现场的PPT显示,Android N的代码减少了50%,新的代码减少50%,安卓N运行环境有了明显改善,软件运行速度提升幅度达到600%,应用安装提速75%.这意味着用户 正在迎

  • Java 10的10个新特性总结

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了. 这时候我真想说:线上用的JDK 7,甚至JDK 6,而JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10-- 刚学Java的同学是不是感觉一脸蒙逼? 就连我这个老司机也同样感觉如此! Java 更新越来越快,我们做技术的也要跟上步伐,不然总会慢别人一拍,这新东西从国外到国内应用一般要好几年的时间,如果我们提前了解并应用这些新技术对自己不是坏事. Java 10的新特性 说了这么多,看Java 10都会

  • C# 9.0 新特性之模式匹配简化的实现

    记得在 MS Build 2020 大会上,C# 语言开发项目经理 Mads Torgersen 宣称 C# 9.0 将会随着 .NET 5 在今年 11 月份正式发布.目前 .NET 5 已经到了 Preview 5 阶段了,C# 9.0 也已经初具规模.忍不住激动的心情,暂停更新<C#.NET 拾遗补漏>系列几天,先要和大家分享一下我了解到的 C# 9.0 的新特性.由于新特性比较多,所以会分成几篇来讲.这是第一篇,专讲模式匹配这个特性的简化. 模式匹配(Pattern Matching)

  • 解析MySQL8.0新特性——事务性数据字典与原子DDL

    前言 事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据字典是前提,原子DDL是一个重要应用场景. MySQL 8.0之前的数据字典 MySQL 8.0之前的数据字典,主要由以下三部分组成: (1)操作系统文件 db.opt:数据库元数据信息 frm:表元数据信息 par:表分区元数据信息 TRN/TRG:触发器元数据信息 ddl_log.log:DDL过程中产生的元数据信息 (2)mysql库下的非InnoD

  • 脚本分析、压缩、混淆工具 JSA新版本发布,压缩效率提高大约10%

    SA 1.0 Alpha发布,压缩效率提高大约10% 压缩算法改进: 实现了自己的文本压缩算法 * 提高了压缩比率以及解压效率. 优化了语法压缩 * 合并连续var申明,         * 删除了多余var申明,         * 删除了多余大括弧({.}),         * 删除了多余分号(:). UI改进: * 自动编码识别     * 支持文件拖放     * 支持JAVA1.4.2+ 当jar打开方式为java时,可双击运行,但,若JAR打开方式被修改(如winrar),请使用如

  • jQuery 3.0十大新特性最终版发布

    jQuery 3.0 最终版发布了.jQuery 3.0将是jQuery的未来.但如果你需要IE6-8支持,您可以继续使用最新版本1.12. jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将

随机推荐