专栏首页PHP饭米粒Swoole 2020 :4.5 新版本的规划

Swoole 2020 :4.5 新版本的规划

转眼 Swoole 开源项目已经历 8 个年头。这 8 年里,有 116 位开发者为 Swoole 贡献了内核代码。有无数 PHP 开发者为 Swoole 提供 BUG 反馈和改进建议。也有大量 Swoole 用户活跃在 Swoole 的问答社区、SegmentFault Swoole 专栏、QQ/微信技术交流群。在 GitHub 平台也累积了 1.5万 + 的 star。作为 Swoole 的创始人、核心开发者,倍感荣幸。感谢各位开发者为 Swoole 生态所做出的贡献。我们一定会不忘初心,坚持开源。

Swoole 4.5 版本

2019年12月份我们规划了新的 4.5 版本,这个版本的主题是 “代码架构重构”。4.4 将作为LTS分支长期支持。在 4.5 版本之前,Swoole 底层更多地是偏向于快速实现,没有完整的代码架构设计,并且代码规范做的较差。编程语言方面也较为混乱,同时存在 C 和 C++ 的源文件。头文件的引用也不够规范,如在非 Server 模块中引用了 server.h 。其实社区中早已有很多 C/C++ 方面的开发者对此提出了建议。在此之前我们团队有很多优先级更高的工作需要完成,在代码规范方面投入的时间精力较少。在新的 4.5 版本中,我们将投入大量时间精力,重新设计代码架构,彻底改变这个局面。

主要工作包括以下几个方面:

  • 改造 Event API ,屏蔽 int 型 fd 的使用,统一为 swSocket 对象
  • 移除 socket_array 全局变量
  • Server Master 彻底移除锁的使用,大幅提升并行能力
  • 全面切换为 C++
  • 优化从 Reactor -> Worker -> PHP onReceive 数据传递方式,减少内存 Copy,onReceive 事件回调函数的性能提升 4 倍

根据社区用户的反馈,在 4.5 版本中将会增加一些新特性:

  • HTTP2\Client 支持 pipeline recv
  • 内置 FastCGI 协程客户端,与短生命周期 fpm 服务完美融合
  • 增加 Coroutine/Batch API,可以并行执行 N 个函数,并接收返回值数组
  • 增加 onReload 事件回调,在发生 reload 之前触发

另外,我们发现使用 gRPC 、Http2 的 Swoole 用户越来越多,Http2 模块存在一些 BUG,在 4.5 版本中我们会对 Http2 Client & Server 做一次大的重构工作,解决所有已知问题,稳定性和健壮性大幅提升。

4.5 版本也将移除一些已废弃的特性:

  • 移除 Buffer 模块
  • 移除 Runtime::enableStrictMode

Swoole 文档计划

由于Swoole是非常底层的软件,内核开发者大量精力都放在了添加新特性,处理BUG上面,对于大家一致吐槽的文档问题一直没有精力解决,现在我们有了更多的开发者以及背后的商业化支持公司,已经有精力解决文档问题了,新的文档旨在解决大家一直吐槽的文档问题,采用现代化的文档组织形式,只包含Swoole4的内容,修改了大量老文档中错误的内容,优化了文档细节,增加了示例代码,新的文档预计在年后发布。

Swoole 核心开发者

由于现在公司项目的工作任务较多,没有过多精力参与到内核开发中。从 4.5 版本开始,我将逐渐减少代码贡献,分阶段退出核心开发组。交给新一代开发者们:Twosee、Shiguangqi、CodingHuang & 其他更多伙伴 。

Twosee 会作为 Swoole 开源项目新一代灵魂人物,就像 PHP 开源的 Nikic 。

Swoole 商业化

从 2018 年起 Swoole 开始了商业化的探索。经过一年半的努力,在 Swoole 项目核心开发者郭新华的带领下,公司勉强达到了自负盈亏的状态。其实创建这个公司的初心是通过提供一些商业服务,带来资金收入,这样可以支持我们整个 Swoole 内核研发团队继续投入到 Swoole 开源事业。也能有更多资源投在文档、测试、社区运营、布道推广上。

在 2019年 识沃公司(Swoole 商业公司)赞助了 PHPCon 大会,向 Swoole 社区很多活跃的贡献者和用户赠送了 T恤、帽衫 等小礼物,并通过对企业的深入合作发现了很多需求,给社区反馈了很多高质量bug。

新华是 Swoole 开源和商业的核心力量。在开源领域,新华贡献了:

  • php-cp:MySQL 连接池软件,在聚美优品被大量使用
  • swoole_serialize:专门为 PHP7 设计的高性能二进制序列化模块,性能比 JSON/PHP串化高出很多、内存占用更少

另外,Swoole 商业公司中很多核心的项目也是新华完成开发的:

  • Swoole Compiler
  • Swoole Tracker

2019 年底 我们新开发了 Swoole Plus 软件,在 Swoole 社区版本之上,增加了一些性能调优的方案,以及安全防护、攻击检测、流量控制、Hbase/Solr-Cloud 支持。功能特性是其次的,主要是为企业提供商业支持服务。帮助企业解决 PHP & Swoole 项目的技术难题。让那些想大规模应用Swoole技术的公司可以放心的使用我们的技术。

明年我们将陆续推出很多应用级别的解决方案,即时通讯(IM)、安全网关、物联网(IOT)、游戏、客服系统等 Swoole 应用项目。

结语

即便我们没有 Google、Facebook、Microsoft 这些大厂那样的资金和光环,也绝不放弃。正是对开源技术的热爱,对 PHP 语言的热爱,才使得我们能够坚持下去。

我们的目标是将 Swoole 做成工业级的软件,作为 PHP 语言网络通信方向的基石。


桶哥后记:最近Swoole社区出现了一些不和谐的声音,其实完善的展示了一个纯碎的技术人员在措辞表达上的缺点。

比如关于不稳定性的理解,本质是指Swoole开源版本在加入一些新的特性后,虽然Swoole团队有测试或者流程保障,但毕竟没有经过社区的历练,打磨,就有可能存在未知的风险,这是任何软件都存在的,商业版本后置merge,也无可厚非,同样,商业版本中也会有些企业定制新的特性,经过验证后,同样反哺社区版本,这是一个双赢的过程,但很多人理解成社区版本是放出不稳定,来把用户转换为商业版,这完全是相反的解读,也不是Swoole团队的本意。

关于性能的理解,也是一样的,Swoole商业团队针对企业的用户,做专门的性能分析和指导,如通过应用代码的优化提升性能,这完全是附加服务,和Swoole本身性能无关,然后通过这企业用户的某些场景,优化了Swoole内核代码提升了性能,如果是通用的场景,也会反哺到社区版本,但如果是在特定的场景,如特定的系统下的优化,这并不适合merge回社区版本,属于纯粹的附加商业服务。

总之,两件引起大家有歧义的事情,本质上都是好的方向和双赢的。社区是基石,开源商业化是让开源能够走的更远的必要因素。希望大家多多理解和支持。

也相信郭新华可以在商业化上的路上越做越好,也可以成为一个优秀的CEO,这样Swoole开源项目也会更加速的向前跑。

----------伟大的分割线-----------

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投稿。

投稿请联系:

shenzhe163@gmail.com

本文由 韩天峰 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)

本文分享自微信公众号 - PHP饭米粒(phpfamily),作者:桶哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【swoole4.0】实现Actor并发模型

    Actor概念来源于Erlang, 对于PHPer来说,可能会比较陌生,写过Java的同学会比较熟悉,Java一直都有线程的概念(虽然PHP有Pthread,但...

    桶哥
  • 史上最好用,支持最全的PHP性能调优工具来了!

    Swoole Tracker 2.8.3 发布,这个版本开始全面支持 PHP5.4,PHP5.5 和 PHP5.6,做这个兼容之前很多人和我说这是个收益非常低的...

    桶哥
  • 玩转 PHP 网络编程全套之数据接收与发送

    它是一个复杂的协议族,但是经过层层封装之后转换为网络数据帧经过网卡发送出去的,当然在发送之前会先发起一次ARP请求查询一下对方的mac物理地址,对方响应后返回以...

    桶哥
  • 快速学习-VScode快捷键大全

    cwl_java
  • 高阶实战 | 如何用Python检测伪造的视频

    译者注:本文以一段自打24小时耳光的视频为例子,介绍了如何利用均值哈希算法来检查重复视频帧。以下是译文。 有人在网上上传了一段视频,他打了自己24个小时的耳光。...

    小小科
  • 【File操作】Java实现导出ZIP压缩包

    最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。 下面代码中,溪源也将import导入的依赖也贴出来了,避免大家引入...

    沁溪源
  • 整理C/C++的可变参数

    c语言中使用可变参数最熟悉应该就是printf, 其是通过...来从代码语句中表示可变化的参数表。

    Rock_Lee
  • 米斯特白帽培训讲义 漏洞篇 逻辑漏洞

    我们收到的验证码是六位数。如果网站没有设置频率限制,或者最大尝试次数限制的话,那我们自然就会想到可以爆破它。

    ApacheCN_飞龙
  • iOS面试招人分享

    最近到新公司有些忙,这篇文章一直想写但没时间,今晚也不往后拖了,抽出时间将其写完。 前一阵子换工作,离职前给公司招一个iOS成员来接任,期间面试近10人,有一些...

    清墨
  • Docker+Jenkins+Gitlab+Django应用部署实践

    在互联网应用快速更新迭代的大背景下,传统的人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好的解决方案,应用好CI/CD可以大大的方便我们的...

    KaliArch

扫码关注云+社区

领取腾讯云代金券