這是來自于Swoole官網(wǎng)的一段話:
Swoole:讓 PHP 無所不能!Swoole 使 PHP 開發(fā)人員可以編寫高性能高并發(fā)的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再局限于 Web 領域。Swoole4 協(xié)程的成熟將 PHP 帶入了前所未有的時期, 為性能的提升提供了獨一無二的可能性。Swoole 可以廣泛應用于互聯(lián)網(wǎng)、移動通信、云計算、 網(wǎng)絡游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領域。使用 PHP + Swoole 可以使企業(yè) IT 研發(fā)團隊的效率大大提升,更加專注于開發(fā)創(chuàng)新產(chǎn)品。
swoole是什么
Swoole?是一個?PHP?的?協(xié)程?高性能?網(wǎng)絡通信引擎,使用?C/C++?語言編寫,提供了多種通信協(xié)議的網(wǎng)絡服務器和客戶端模塊??梢苑奖憧焖俚膶崿F(xiàn)?TCP/UDP服務、高性能Web、WebSocket服務、物聯(lián)網(wǎng)、實時通訊、游戲、微服務等,使?PHP?不再局限于傳統(tǒng)的 Web 領域。
項目起源
Swoole 項目最初的想法是來自于之前所做的一個企業(yè)軟件項目。當時大概是2010年底,公司產(chǎn)品有一個需求是用戶可以任意生成一個 email 地址,然后其他用戶可以向這個email發(fā)郵件,后臺能實時將郵件內(nèi)容解析成數(shù)據(jù),并主動通知用戶。當時項目使用PHP開發(fā)的,在實現(xiàn)這個需求時遇到了難題,PHP只能依賴其他的STMP服務器,通過pop3協(xié)議定時查收新郵件來完成,這樣就不是實時的。如果要實現(xiàn)的實時系統(tǒng)必須自己寫一個TCP Socket Server實現(xiàn)SMTP協(xié)議接收數(shù)據(jù)。當時PHP在這個領域幾乎是空白,沒有一套成熟的網(wǎng)絡通信框架。為了實現(xiàn)需求,我從socket學起到TCP/IP、IO復用、libevent、多進程,最后終于實現(xiàn)了這套程序。做完這個項目后我就想把這套程序開源出來,希望能幫助其他PHPer解決在這個領域的難題。如果能有這樣一個框架,那么PHP就能從單純地做一個Web網(wǎng)站延伸到更大的空間。
還有一個重要的原因是PHP程序的性能問題,我最早是學Java出身的,工作后才轉(zhuǎn)行成為一名PHP程序員。在使用PHP開發(fā)程序的過程中,我一直在思考的問題 PHP 和 Java 比最大的優(yōu)勢是什么?簡單高效, PHP 在請求完成之后會釋放所有資源和內(nèi)存,無須擔心內(nèi)存泄漏。代碼的質(zhì)量無論高低一樣運行的很流暢。但同時這也是 PHP 致命的缺點。一旦請求數(shù)量上升,并發(fā)很高的時候,快速創(chuàng)建資源,又馬上釋放,使得 PHP 程序運行效率急劇下降。另外一旦項目的功能的越來越復雜,代碼增多后,對于 PHP 也會是災難。這也是 PHP 的框架為什么沒有被 PHP 程序員廣泛接受,而 Java 不存在這個問題。再好的框架也會被這種低效的方式拖累,導致系統(tǒng)變慢。所以想到了使用 PHP 來開發(fā) PHP 的應用服務器,讓 PHP 的代碼加載到內(nèi)存后,擁有更長的生命周期,這樣建立的數(shù)據(jù)庫連接和其他大的對象,不被釋放。每次請求只需要處理很少的代碼,而這些代碼只在第一次運行時,被 PHP 解析器編譯,駐留內(nèi)存。另外,之前 PHP 不能實現(xiàn)的,對象持久化、數(shù)據(jù)庫連接池,緩存連接池都可以實現(xiàn)。系統(tǒng)的運行效率會大大提高。
經(jīng)過一段時間研究,目前已經(jīng)初步得到實現(xiàn)。使用 PHP 本身編寫出 HTTP 服務器,以獨立服務器方式運行,單個程序頁面 ( 有對象生成,數(shù)據(jù)庫連接、 smarty 模板操作 ) 的執(zhí)行時間由原來的 0.0x 秒,下降到 0.00x 秒。使用 Apache AB 并發(fā) 100 測試。比傳統(tǒng) LAMP 方式, Request per Second 高出至少 10 倍。在我的測試機上 (Ubuntu10.04 Inter Core E5300 + 2G 內(nèi)存 ) , Apache 只跑到 83RPS 。 Swoole Server 可以跑到 1150 多 RPS。
這個項目就是Swoole的雛形。這個版本一直持續(xù)維護了2年多,在這個過程中逐步有了一些經(jīng)驗積累,對這套技術(shù)方案的存在問題有了更深入的理解,比如性能差、限制較多無法直接調(diào)用操作系統(tǒng)接口、內(nèi)存管理效率低下。
名字由來
Swoole這個名字不是一個英文單詞,是由我創(chuàng)造的一個音近字。我最早想到的名字是叫做sword-server,寓意是為廣大PHPer創(chuàng)造一把鋒利的劍,后來聯(lián)想到google也是憑空創(chuàng)造出來的,所以我就給它命名為swoole。