workerman 在比較 swoole 在實際開發專案中,你會選擇哪一個?對於新手學哪個較好,有什麼建議嗎?
網路上有評論說swoole效能比workerman高不少,真的是這樣嗎?
我們先來看看各自介紹:
#workerman:開源高效能PHP應用容器( github 10.2k )
workerman 是純php寫的網路框架,支援高並發,超高穩定性,它大大突破了傳統PHP應用範圍,被廣泛的用於即時通訊、APP開發、小程式開發、聊天室、手遊服務端、網路遊戲、硬體通訊、車聯網、智慧家庭、物聯網等領域的開發。 【workerman教學】
支援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最新上線)
開通位址↓↓↓
https://www.php.cn/course/1475. html
2.Laravel版:《基於workerman仿百度商橋IM即時通訊(Laravel實戰)》(2020.10.12上線)
開通位址↓↓↓
https://www.php.cn/course/1131.html
( 課程諮詢課件資料領取)
以上PHPer的觀點你贊同嗎?歡迎高手們來噴!
#