Swoole vs Workman

目前php通信服務框架最流行的有wwoole與workerman,swoole是有C語言開發的php擴展類,而workerman是純PHP開發框架,可能swoole比workerman出名,在百度、騰訊公司都有在使用,使用頻率也比較高,但workerman也有很多項目在用,哪到底誰能更勝一籌呢?

首先我們一起來了解一下swoole:

Swoole是面向生產環境的 PHP 異步網絡通信引擎使 PHP 開發人員可以編寫高性能的異步併發 TCP、UDP、Unix Socket、HTTP,WebSocket 服務。Swoole 可以廣泛應用於互聯網、移動通信、企業軟件、雲計算、網絡遊戲、物聯網(IOT)、車聯網、智能家居等領域。 使用 PHP + Swoole 作爲網絡通信框架,可以使企業 IT 研發團隊的效率大大提升,更加專注於開發創新產品。

Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務器,異步 TCP/UDP 網絡客戶端,異步 MySQL,異步 Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。

除了異步 IO 的支持之外,Swoole 爲 PHP 多進程的模式設計了多個併發數據結構和IPC通信機制,可以大大簡化多進程併發編程的工作。其中包括了併發原子計數器,併發 HashTable,Channel,Lock,進程間通信IPC等豐富的功能特性。

Swoole2.0 支持了類似 Go 語言的協程,可以使用完全同步的代碼實現異步程序。PHP 代碼無需額外增加任何關鍵詞,底層自動進行協程調度,實現異步。

接下來我們再來聊一聊Workerman:

Workerman是一款開源高性能異步PHP socket即時通訊框架。

支持高併發,超高穩定性,被廣泛的用於手機app、移動通訊,微信小程序,手遊服務端、網絡遊戲、PHP聊天室、硬件通訊、智能家居、車聯網、物聯網等領域的開發。 支持TCP長連接,支持Websocket、HTTP等協議,支持自定義協議。擁有異步Mysql、異步Redis、異步Http、MQTT物聯網客戶端、異步消息隊列等衆多高性能組件。

Workman擁有以下幾點特性:

1.純PHP開發,多進程支持,支持php7,支持hhvm
2.支持TCP/UDP,單機可支持數百萬以上TCP長連接
3.支持分佈式部署,集羣能支持數百萬甚至更高的併發TCP連接
4.支持libevent事件觸發網絡庫
5.支持熱更新及服務器平滑重啓
6.擁有異步Mysql、Redis、Dns等衆多高性能組件

性能上Swoole畢竟是C語言開發的,在某些地方如內存管理、數據結構、通信協議解析上肯定要比PHP開發的workerman高。

功能上swoole提供的高級特性很多,列舉幾個workerman沒有的吧,比如SSL/TLS隧道加密、http2.0、異步mysql驅動、異步redis驅動、異步的http/websocket客戶端、process、lock、atomic、table。另外Swoole 2.0內置了PHP原生協程的支持,PHP代碼也可以使用類似於Go語言的協程來實現高併發的網絡服務器。

外部依賴上workerman需要依賴很多額外的第三方PHP擴展來實現,侷限性比較大,這些擴展並非是PHP官方維護的,維護性方面良莠不齊,有些擴展連PHP7都不支持,數年沒人維護。而Swoole基本上無依賴,底層的代碼全部可控。

開發維護方面,Swoole的開發團隊目前有大概18人左右,開發者基本上都是來自騰訊、百度、阿里、滴滴、微博等國內一線互聯網企業,支持維護的團隊更穩定。

如果說 Swoole 2 以前,swoole 和 workerman 的差別可能就是一個是 C 擴展,一個是 PHP 代碼的區別,類似 CI 與 Phalcon。

但 Swoole 4 已經與 workerman 完全不是一個等級了,Swoole 4 已然成爲了核彈,而 workerman 還是那個 TNT 炸藥。

Swoole 4 帶來了與 Golang 幾乎一致的 go + chan + defer 協程,並 Hook 的 PHP Stream 直接讓 PDO/Redis 等擴展加入了協程的豪華套餐,現在的 Swoole 幾乎等同一個動態單核版本的 Golang,已經能處理非常多的後端計算場景。

無法達到的,需要非常紮實的系統開發能力,也需要對 PHP 的底層 API 非常瞭解,Swoole 團隊令人十分傾佩。

另外因爲 Swoole 有創造的能力,workerman 則只能使用內置擴展提供的現有功能開發,就如同 MixPHP 基於 Swoole 開發,也只能通過 Swoole 提供的現有功能開發,如果擴展沒有提供某些功能特性,有些想法就實現不了,好在 Swoole 團隊溝通效率非常高,基本上我們一些問題都能及時的給予答覆,使用 PHP 內置擴展的 workerman 就沒那麼好運了,擴展團隊並不會因爲 workerman 而修改擴展的某項功能。

有些人說 Swoole 文檔不好,在我看來這個根本不成立,我開發一個完整的框架都源於 Swoole 文檔,在我看來應該是大多 PHPer 經驗都集中在如何實現應用需求,而且又幾乎都是編寫同步程序,導致知識體系非常片面,從而導致看不懂,這方面 Javaer 則更好一些,由此可見並不是文檔的問題。

當然workerman的優勢是它完全使用PHP代碼實現,開發者可以直接看它的源碼。有特殊需求也可以直接改源碼來實現。如果換成swoole就不是那麼簡單了。workerman做的事情更多一些,即是框架又是工具和完整的解決方案,對於沒有太多後端編程功底的程序員也來說確實會容易很多。而swoole實際上只是一個底層庫,不是拿來可用的完整產品,基於swoole有很多PHP的框架和程序,比如tsf、zan php framework、hprose-swoole、zphp、swoole/framework、blink、dorarpc、SwooleDistributed等等,普通開發者可以直接基於這些項目進行開發。

workerman不需要了解太多通信服務,底層框架也不用學習,更不用藉助PHP環境開發,可以獨立運行,workerman提供完整的通信協議框架,也可以自定義開發協議,所以workerman比較適合新手PHP程序員,workerman資料文檔相對來說比swoole多。workerman缺點是需要安裝擴展類比較多,在高併發性能,穩定性比不上swoole。

綜上所述swoole與workerman其實各有千秋,在一般項目中根本看不出來哪個比較好用,所以不是開發大型類型網站的,新手可以選擇workerman提高開發速度,老手選擇swoole可以證明自己的實力。世界上沒有最好的技術,主要看你要開發什麼、團隊或個人的實際情況如何,合適的纔是最好的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章