首页 > Swoole扩展 > Swoole-1.8.0的开发计划

Swoole-1.8.0的开发计划

2015年12月3日

12月1日发布了swoole-1.7.21版本,修复了很多BUG。这是swoole-1.7最后一个版本了,以后不再更新。我们启动了雄心勃勃的swoole-1.8开发计划。在介绍1.8的计划前,先讲一段小插曲。

性能测试游戏

昨天在1.7.21发布后,正好赶上PHP7也发布,忍不住想要做下性能测试。安装了一下HHVM,准备对比PHP5.6、PHP7、HHVM3.9的性能。对WordPress程序的测试中,PHP7确实已经与HHVM很接近了。不过这不是重点,接下来我又测试了一下新写的PHP版本WebSocket客户端。这一测问题就来了。我发现PHP在这个场景下性能非常差。当时的数据是:

5.6.9 cost 23792.750835419ms
5.6.99-hhvm cost 1930.1018714905ms
7.0.0RC7 cost 12121.658086777ms

压测10万次WebSocket协议打包,竟然消耗了23秒,PHP7比PHP5.6提升了1倍性能,但和HHVM还是有较大的差距。这个结果倒是在预料之中,毕竟Zend PHP没有JIT,这样纯密集计算的场景下性能不会太好。我顺手加了一个C版本的websocket_pack。再次压测,结果震惊了。

5.6.9 cost 23792.750835419ms
5.6.99-hhvm cost 1930.1018714905ms
7.0.0RC7 cost 12121.658086777ms
C-websocket_pack cost 57.986974716187ms

C语言版本只用了57ms就完成了10万次的打包。比PHP版本性能高出300多倍。即使是有JIT的HHVM也无法和C语言版本的websocket_pack相提并论。好了接下来就聊聊swoole-1.8的开发计划。

Swoole-1.8的开发计划

异步模式下reload/max_request的支持

swoole-1.7下如果Server是纯异步非阻塞的模式,使用reload/max_request可能会导致某些事件丢失。所以WIKI中明确写了异步模式不应该设置max_request,reload会出现一些错误。1.8会解决此问题,对异步模式下Worker进程退出逻辑将发生一些修改。底层会确保Worker进程中的事件全部处理完后才会退出。

网络协议部分的调整

swoole-1.8将增加Http异步客户端(同步阻塞模式直接用CURL就可以了)、WebSocket同步/异步客户端。1.8还将增加http2.0、mqtt协议的支持。

另外一个重要调整就是,1.8将支持Server多协议。目前1.7版本一个swoole_server只能使用一种网络协议,比如swoole_http_server就只能处理HTTP协议,无法再支持固定包头+包体、EOF协议。有一些场景下一个Server需要做多件事情。新的版本会支持混合多协议。

正是因为上面的性能测试,让我下定决定在swoole内逐步开始支持绝大部分通用的网络协议。C语言实现的客户端在性能上远远超过其他语言。Swoole要让PHP在网络通信方面超过其他语言,比如Java、Node.js、Golang、Erlang等,只有C语言实现一条路可选。

扩展内RPC的支持

RPC作为服务器端程序中很重要的一项功能,Swoole没有理由不去支持它。1.8版本将会内置RPC的基础模块,包括Server端和Client端,Client端会同时支持异步和同步,并且支持php-fpm下调用。

配套工具的支持

经常有PHPer向我反馈想要有一套命令行工具可以简单地实现Server程序的start、stop、reload、status,以及通过inotify监控实现自动reload,新的swoole-1.8开发计划中将包含这些工具,我们会提供一些通用的、非侵入式的工具。

Swoole-1.8什么时候发布

我们已经启动了开发,新特性会逐个在子版本上线,预计2016年7月份会上齐所有特性。

 

分类: Swoole扩展 标签: