Swoole 2020 :4.5 新版本的規劃
- 2020 年 2 月 16 日
- 筆記
轉眼 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 版本中將會增加一些新特性:
- HTTP2Client 支持 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帶來一些值得細細品味的精神食糧!
飯米粒只發原創或授權發表的文章,不轉載網上的文章
所發的文章,均可找到原作者進行溝通。
也希望各位多多打賞(算作稿費給文章作者),更希望大家多多投稿。
投稿請聯繫:
本文由 韓天峰 授權 飯米粒 發佈,轉載請註明本來源信息和以下的二維碼(長按可識別二維碼關注)