swoole的應用場景?

這幾天開始學習swoole,先是發現定時器很爽,可以取代crontab了。

然後用它的task做了個非同步發郵件的,確實爽。

又發現用它跑一個Server來,彷彿一個迷你nginx,

由於完全沒有swoole的應用經驗,搞不懂怎麼和框架結合,也不明白它正確打開方式是啥,總不該就像我這樣是跑幾個腳本吧。。。。。

谷歌半天也迷迷糊糊的。


我用swoole的websocket寫過一個框架,針對移動端API開發的。

正如韓天峰所說,swoole是給高級PHPer用的,初中級PHPer用好lamp或lnmp就已經足夠了。因為使用swoole拓展的PHP腳本與傳統的PHP腳步不同,前者是需要預先在服務端執行的,而後者是每次訪問時才會執行。

比如你的程序中定義了一個類A,那麼在每次有用戶訪問時,類A都需要提前編譯到內存中,1萬次訪問就要編譯1萬次。而用swoole拓展則只需要在服務端編譯一次,無論多少次訪問都不需要再次編譯了,只要swoole的進程存在,類A就會一直存在於內存中。

因此,使用swoole來編寫常規項目時,需要將自己置身於第三方上帝的角色,而非訪問者的角色來編寫並閱讀自己的代碼。

比如:PHP入門時就必須要掌握的session,對於運用了swoole擴展的PHP程序而言,完全可以用一個變數來替換。

再比如:平時寫PHP代碼,完全不必擔心內存使用,全局變數/函數/對象等,可以隨便使用,因為PHP腳本執行結束後,內存自然會自行釋放掉。但用swoole擴展的PHP程序,則必然要手動註銷全局的變數/函數/對象等,這就考驗了PHPer的閉包能力等。

對於普通PHPer來說這種觀念是致命的,其實這也是swoole至今還沒有被大部分PHPer接受的原因。


不太贊同:"swoole是給高級PHPer用的,初中級PHPer用好lamp或lnmp就已經足夠了"

因為如果只是 HTTP 方面的應用,完全可以把 SwooleHttpServer 封裝的對用戶很友好,能降低門檻的。

我就一直在做這方面的努力,一直在開發一個基於 Swoole 的常駐內存型 PHP 框架 MixPHP,希望能持續完善這個項目,讓更多初中級 PHPer 也能享受到 Swoole 帶來的好處。

如果你對 MixPHP 感興趣,可點擊我的簽名了解。


基於swoole tcp server + thrift + laravel寫過一個框架。

公司服務端語言是php, 業務發展到已經很難維護,必須要做服務拆分。

於是用了swoole搞了一套微服務框架。

主要使用到了swoole tcp server功能。

微服務基於thrift協議,業務代碼基於laravel框架。

用go寫了一個http_2_thrift的組件把http協議轉化成thrift協議與微服務通信。

最終這套架構既可以提供http api 也可以提供thrift api。


推薦閱讀:

為什麼使用正則表達式會慢?
25歲從通信設計轉行做程序員學什麼語言比較前景比較好(待遇)?
如何寫好業務代碼?
因不知道Reservoir Sampling演算法而掛掉面試的我是否要檢討自己?
各主流編程語言各自擅長什麼場景,為什麼?

TAG:軟體開發 | PHP | 伺服器 | 高並發 | Swoole |