swoole在PHP圈火了這麼久,從2年前我用node寫socket聊天服務器的時候就火了,那時候,常常有相似的文章php+swoole完爆nodejs
之類的文章來吸引眼球,先不說它的好與壞,單單說他的出現,確實給php注入了一股新的活力。php
首先,php是單進程的,無法在一個程序塊中使用多進程來處理一個複雜的邏輯,即便後來出現了pcntl_fork
模塊來處理多進程,可是它比較雞肋,並不適用於windows
平臺,其實最大的問題是它使用起來很是之複雜和繁瑣,難以理解。node
其次,php並不支持異步,這一點偏偏是nodejs
平臺所擅長的。因此,在處理一些高併發高負載的請求的時候,咱們每每會考慮用nodejs
來作。mysql
再者,php並不適合作TCP,socket之類的長鏈接,第一是性能問題,第二,我我的以爲仍是複雜和繁瑣,使用起來會很是吃力,特別是對socket, TCP/UDP, 網絡IO等底層的東西並非很熟悉(好比如今的我)的時候,用起來更是吃力。nginx
那麼,有沒有一種辦法,可以讓php很好的支持異步、異步、簡單的使用tcp/udp/socket服務呢。噹噹噹。swoole應運而生了!!!c++
官網是:http://www.swoole.com/ ,是大神韓天峯(Rango)
的做品,我有幸在B站的一次技術會議上,見到了大神,很平易近人的一個大叔。git
swoole
發音爲 死沃爾
, 並非死喔了
, 官網給它的介紹是:github
swoole是PHP的異步、並行、高性能網絡通訊引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫鏈接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。web
先不說這些玩意兒怎麼用,但看這些描述,簡直就是吊炸天啊,沒swoole以前,基本是在用其餘的語言諸如c++
,Go
等靜態語言來寫這些服務了,而如今,phper們,大家徹底能夠用swoole協助用PHP語言寫這些牛逼的玩意了。redis
在進行系統的學習swoole以前,先來講下swoole的原理和機制,我以爲知道了會對它有一個大體的瞭解。sql
Swoole雖然是標準的PHP擴展,實際上與普通的擴展不一樣。普通的擴展只是提供一個庫函數。而swoole擴展在運行後會接管PHP的控制權,進入事件循環。當IO事件發生後,swoole會自動回調指定的PHP函數。
也就是說,swoole就是個披了php外衣的nginx,大量的功能都是用c來實現。一些功能的調用其實並沒php什麼事,它只是個純粹的膠水,有什麼功能全用c在實現,而後執行完成再回調給php。
因此,你至關於在用php語法來寫底層的c服務,你並不須要瞭解底層的實現邏輯,你會用php就足夠了,因缺思婷~
在說下swoole提供了哪些功能給咱們用,覺得咱們用到哪些服務時,能夠用swoole來幫咱們實現。
若是你的業務中,有用到以上等特性,你又在用使用php,那麼徹底能夠用swoole來完成了。
swoole的安裝相對來講很簡單,你徹底能夠把他當作一個普通的php的擴展來安裝。
簡單記錄下:
pecl安裝:
pecl install swoole
源碼安裝:
git clone https://github.com/swoole/swoole-src.git cd swoole-src phpize ./configure make && make install
Mac下brew安裝:
brew install php56-swoole brew install php70-swoole
我在學習時候,按照的是目前的最新文檔版本: 1.8.11-stable
安裝好以後呢。若是你還須要對你想對你的編輯器,好比:phpstrom
對swoole的代碼提示功能,就能夠下載幫助文件:https://github.com/eaglewu/swoole-ide-helper。
下載這個完成以後呢,當你打開一個項目,在External Libraries上就能夠打開一個框,而後把下載的提示文件,加進來:
若是,代碼提示沒生效,能夠選中 Src裏的全部文件,右建,Mark as Plain Text,就能夠了。
OK,一個簡單的介紹和安裝就到這裏了,下面會着重介紹如何使用swoole。
update 2016.11.29
做者更新了新的 ide-helper文件,更加智能好用,能夠根據swoole擴展本身去生成ide-helper文檔:
Git 下載這個:https://github.com/swoole/ide-helper
而後 cd ide-helper &&& sudo php dump.php
會生成 output文件夾,這就是ide幫助文件,按照上面的方式加到ide的擴展包裏,寫代碼就能識別了。並且是最新的代碼特性。