workerman 對比 swoole 實際開發項目中,你會選擇哪個?對于新手學哪個較好,有什么建議嗎?
網上有評論說swoole性能比workerman高不少,真的是這樣嗎?
我們先來看下各自介紹:
(相關資料圖)
workerman:開源高性能PHP應用容器( github 10.2k)
workerman 是純php寫的網絡框架,支持高并發,超高穩定性,它大大突破了傳統PHP應用范圍,被廣泛的用于即時通訊、APP開發、小程序開發、聊天室、手游服務端、網絡游戲、硬件通訊、車聯網、智能家居、物聯網等領域的開發。
支持TCP長連接,支持Websocket、HTTP等協議,支持自定義協議,擁有異步Mysql、異步Redis、異步Http、MQTT物聯網客戶端、異步消息隊列等眾多高性能組件。
Swoole:PHP 協程框架(github 17.6k)
swoole是c/c++寫的網絡通訊擴展,Swoole 使 PHP 開發人員可以編寫高性能高并發的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再局限于 Web 領域。
Swoole 可以廣泛應用于互聯網、移動通信、云計算、 網絡游戲、物聯網(IOT)、車聯網、智能家居等領域。使用 PHP + Swoole 可以使企業 IT 研發團隊的效率大大提升,更加專注于開發創新產品。
兩者功能類似
那究竟哪個更好一些?我們該如何選擇呢?
我們一起來聽聽PHPer的使用感受和看法
一:學習成本
首先我們闡述下php中文網的觀點:
對于新手,我們更傾向于推薦workerman:簡單,易用,擴展性好,可快速上手!php 語言的價值不就是簡單易用嗎?
目前關于workerman最新的課程全網很少,所以php中文網近期精心錄制了一套:PHP workerman 基礎到實戰課程,在今天上線了!
希望能夠幫助到同學們,提升自己的技能!
課程名稱:
《PHP Workerman+ThinkPHP6 即時通訊聊天系統》
(ThinkPHP6+Workerman/websocket)
本課程是基于php workerman創建websocket服務開發的實時web聊天系統,課程內容主要包括:
1、websoket通信原理以及與http的關系
2、workerman搭建websoket服務
3、QQ群聊原理與實現
4、Workerman消息推送與定時器
5、一對一私聊與客服隨機分配
6、客服后臺獲取在線客戶列表等
7、聊天消息存儲等內容。
感興趣的同學,趕緊上車,鎖定上新活動價!
限時折扣活動:原價¥399元,限時折扣價¥189元,12.8號截止!
全部課程預計12.8號之前更新完成,屆時價格會有一定幅度上調!
開通地址↓↓↓https://www.php.cn/course/1475.html
(課程咨詢+課件資料領取)
網友們觀點:
網友評價1:
如果你之前沒有過網絡編程或多進程開發經驗的話,我的建議是你先從workerman入手,畢竟workerman是純PHP代碼實現的,你在深入理解其原理和處理問題時不會有太大的障礙。
通過對workerman的深入學習,你可以學習到網絡編程相關的基礎知識,這種程序是如何設計實現的,當中需要注意哪些細節。你還可以學習到如何開發多進程程序,進程間如何管理和通信。
當你這些了解清楚后,你再過渡到swoole會覺得門檻沒有那么高,如果你直接上手就swoole的話,至少進程間的管理和通信都需要你自己去實現,你可能連思路都沒有。
由淺入深,先從基礎開始,再向高級進階。
網友評價2:
swoole 是作為 php 的擴展,不依賴其他擴展,底層是 c,程序中直接調用,性能較高。workman 是用原生 php,依賴其他擴展,需要下載源碼包。
前者可以理解為 swoole 是提供給 php 的 api ,原生度比較高,所以沒有封裝實踐中的 業務邏輯,需要自己開發。后者對某種業務需求有封裝,更容易上手。
本人曾經學習 swoole 個把月,感覺比較難駕馭,需要掌握比較多的基礎知識,實際工作中運用較少,但是感覺值得學習。
總之,用哪個看用來做什么,大眾需求, workman 可能開發成本更低,有些特定需求,也可以研究研究 swoole。
網友評價3:
推薦 workerman!swoole 那套直接 c 拓展的不適合進階新手,新手要的是漸進式,穩定性,循序漸進,先掌握一個范式,再一步一步來。
workerman 也出了官方 web 框架 webman,壓測排名在 swoole 之上,毫不夸張的說,workerman 目前是最成熟,成本最低的 PHP 解決方案,門檻還低。
網友評價4:
swoole是由C語言開發的php擴展類,就性能而言swoole具有優勢,對PHP程序員有一定的要求,了解底層通信服務開發,需要學習的知識比較多,swoole一般適合老手開發。workerman純php開發框架,很容易上手。號稱只要你會php,你就使用它開發socket應用服務。
建議先學習workerman,在學習swoole。
網友評價5:
workerman是純PHP實現的常駐內存框架,同步阻塞模式,先學習這個方便對常駐內存模式有一定的了解,對內存泄露有一定的了解。
workerman熟悉后再來學習swoole,swoole除了常駐內存,還有就是協程,這個在傳統開發模式中是不存在的。協程類似線程,開發過程中需要主要各個協程中間的數據之間的操作問題。
二:實際應用
網友評價1:
我的一個開源項目用的就是 workerman 項目查看,依賴的環境比較少,開發難度小。如果不是上萬的并發建議 workerman。但是我的經驗表明 95% 的項目都不會有上萬的并發。初學者我也建議用 workerman。swoole 你也可以同時學習,畢竟協程更節省硬件資源。還有就是 workerman 的作者超級有耐心回復各種問題,從來沒有見過如此熱心的
網友評價2:
swoole 是擴展,在使用 workerman 的同時,若你需要用到 swoole 的東西,同樣也可以使用,而且從應用角度來說,我更喜歡 workerman gateworker。這些能直接解決很多問題,避免從基礎進行研究
網友評價3:
workerman 更簡單穩定,考慮了很久還是用workerman , swoole目前太亂了,生產環境穩定畢竟用的php原生東西 swoole玩了一段時間 坑太多了。
網友評價4:
Swoole的部署折騰了我一個禮拜,終于能跑通了,再想想還要很多第三方類庫和擴展要繼續折騰,還是算了。
Gatewayworker直接用XFTP工具把文件夾拖進去,然后start就好了,省心多了。
對于我這種小白來說,不考慮什么集群,什么上千萬的并發,什么容器,我選Gatewaywroker。
網友評價5:
個人覺得swoole和workerman都能解決高并發io問題,但用了兩種思路。不存在誰高級,誰低級。用C寫PHP擴展解決問題就顯得有多牛逼了,那可不見得。用C寫PHP擴展,對比的應該是C程序員,而不是PHP程序員,那么C語言就比PHP語言高級,那這么說的話大家都用C開發網站得了唄。
新課推薦:
三:性能
網友評價1:
說swoole比workerman好,是因為評論的人沒用過workerman,他只是片面的認為c++比php快,就認為其程序框架也是這樣。
然而,workerman只載入解析一次php文件,然后便常駐內存,極大的減少了磁盤IO及PHP中請求初始化、創建執行環境、詞法解析、語法解析、編譯opcode、請求關閉等諸多耗時過程。所以純碎從語言層面比較,更應該是c++和機器碼的區別。
兩者都是非常優秀的開源框架,只是看自己更喜歡折騰c++還是php罷了
網友評價2:
其實性能差不多,workerman更穩定,發現問題,更易維護
網友評價3:
從跑分來每個指標workerman都比swoole略高一些,總體來看看swoole和workerman結果差不多,不過這僅僅是跑分,真實效果還是要看實際項目。
網友評價4:
我覺得是不是都搞錯了對比雙方
workman是PHP寫的,但本質是用pcntl等擴展實現了功能
swoole是C/C++寫的,但實際還是以PHP擴展形式出現
所以其實都是PHP擴展
所以其實比的是pcntl等擴展和swoole擴展的效能
所以workman不慢不是很正常么?
網友評價5:
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=db&l=zik073-1r
這個是國外權威壓測機構 www.techempower.com 第19輪壓測,帶數據庫業務的,swoole用了數據庫連接池+協程,workerman就是原始php mysql阻塞用法,結論仍然是二者性能差別不大,各項性能指標均是workerman好些,尤其是plaintext,比swoole高35%左右。當然,這個只是壓測結果,僅有部分參考意義,不代表現實項目最終結果。
新課推薦:
四:生態
網友評價1:
因為項目需要, 智能家居一類的, 本來準備用C做, 想想swoole和workerman很火很成熟, 不少穩定應用場景了, 想想為什么不能用這倆試一下呢? C水平有限, 用PHP能滿足需求多好?
所以今天大概了解了下swoole和workerman, 初步映象對swoole沒有想象中那么好, 反而workerman讓我非常驚艷...
先說swoole:
swoole, 官網頂部手冊竟然打不開, 后來找半天找到一個手冊. 你們這么nb團隊為何不能把官網做的像樣一點呢? 需要很多工作量嗎? 至少把官網頂部那個手冊改為正確地址好不好?遇到問題找了一圈沒找到啥解決辦法. 發了issues, 論壇也發帖了, 沒啥反應...
再說workerman:
workerman例子很完善, 講解詳細, 比swoole好不少. 重要一點是用純PHP就能實現如此之高性能php-cli在php5.3時代就已經成熟了, 一直沒時間在此基礎做大型項目, 老是感覺性能不行, workerman卻讓我驚艷.
workerman用到的pcntl, posix兩個擴展也是PHP自帶的擴展, 默認會編譯進去, streams系列函數是PHP自帶函數, 更沒有擴展之說. 所以某人說的太夸張了. 并不需要不成熟第三方擴展, 這兩個擴展是非常成熟的擴展, 穩定到進入PHP默認開啟的擴展, streams甚至進入PHP基本函數了. 如果為了像Nginx一樣開啟Kqueue和Epoll則需要安裝和swoole一樣的pecl擴展:pecl-event. 此擴展也非常穩定了. 這些都是基本擴展, 不會不穩定更不會PHP7,PHP8不支持. streams, pcntl, posix, pecl-event其實對底層的淺封裝, 性能沒問題, 看你怎么用, 會不會用, workerman就用的很好。
最后說一下:
我不同意韓天峰說的swoole需要比較高超水平, 其實兩者都是給你封裝好, 拿來用就行. 但如果出現問題workerman可以去了解協議, 修改封裝的PHP代碼. swoole就沒法修改了, 至少你要會C語言才能去修改, 這是很多phper不擅長的.
我暫時決定用workerman了, 因為出現上述那種問題我可以自己修改workerman的PHP代碼解決. 而swoole是用C重新實現的, 很多坑要去完善, 而社區也不活躍, 沒人理睬, 而我沒精力去查C代碼找原因. 發現很多人也是試驗了swoole后發現還是workerman穩定些, 所以改用workerman了. 其實我還是希望swoole能快速發展的完善些.
以上純屬個人觀點, 一切都是為了PHP能健康快速發展下去, 希望swoole越來越好...
網友評價2:
其實都差不多,如果直接基于swoole或者workerman開發,都不算容易。
但現在都可以基于框架開發,比如hyperf和webman,當然,如果你也試試imi,你會發現他倆在使用的時候,基本沒區別。
Imi說,反正我都支持!
網友評價3:
workerman的文檔做的非常好,例子也豐富很多,我覺得workerman更容易上手,而且比swoole穩定很多
網友評價4:
官方方案fpm+opcache+jit+長連接,或者workerman,穩如老狗,官方方案,有問題自己輕松解決。
實在沒有辦法可以引入第三方語言綜合即可。如果你關注PHP官方的協程或者異步方案,可以瀏覽下Amphp作者推出的Fiber擴展,已經進入rfc階段。
網友評價5:
workerman更符合php的精神,作為一個workerman一年多使用者,堅決支持workerman。而且workor真的特別認真,新手問題在論壇回復的也很及時,對新手友好度max。
精品課推薦:
1.ThinkPHP版:《PHP Workerman 基礎與實戰:即時通訊聊天系統》(2022.11.30最新上線)
(原價¥399元,上新折扣價¥189元,僅限8天)
開通地址↓↓↓https://www.php.cn/course/1475.html
2.Laravel版:《基于workerman仿百度商橋IM即時通訊(Laravel實戰)》(2020.10.12上線)
(原價¥299元,限時折扣價¥139元,僅限8天)
開通地址↓↓↓https://www.php.cn/course/1131.html
(課程咨詢+課件資料領取)
以上PHPer的觀點你贊同嗎?歡迎高手們來噴!