在Swoole的世界中,你將學(xué)習(xí)到什么?在接下來的學(xué)習(xí)中,我們將要接觸到的,將是 PHP 擴展中非常出名的一個高大上的框架,那就是 Swoole 。或許你已經(jīng)在生產(chǎn)環(huán)境中使用過了,或許你只是看過官方文檔寫過幾個例子,當(dāng)然,更有可能你只是聽過它的名字。 不用太擔(dān)心,通過我們的學(xué)習(xí),你將會掌握到基本的 Swoole 開發(fā)知識,一些計算機操作系統(tǒng)以及網(wǎng)絡(luò)的簡單知識,以及一個非常類似于 Laravel 的 Swoole 框架。相信通過這些,你就可以嘗試在自己的真實項目中使用 Swoole 來做一些項目,體驗 PHP 最為人詬病的效率問題的超強解決方案。 Swoole我們先來看看 Swoole 是什么。
上面這段是官方網(wǎng)站首頁上對于 Swoole 的說明??粗透杏X高大上吧?其實,TCP、UDP、Unix Socket、HTTP、 WebSocket 這些,我們普通 PHP 也能做到,但是,通常我們在進行普通的 Web 開發(fā)時,都會借助一個服務(wù)器應(yīng)用,比如說 Apache 或者 Nginx 來配合 fastcgi 進行實現(xiàn)。而在 Swoole 中,只需要運行起 Swoole 服務(wù)就可以實現(xiàn)這些服務(wù)的掛載了。當(dāng)然,我們還可以在外面套上 Nginx ,這樣可以更方便地管理應(yīng)用地址(域名)。 此外,在官方描述中,高性能是一個關(guān)鍵詞,究竟性能能提升到什么程度呢?我們后面將會有例子演示。 和傳統(tǒng) PHP 概念上的不同即使你沒有做過 Java 或者 .NET、C/C++ 之類的開發(fā),應(yīng)該也多少聽說過它們是需要編譯之后生成一個運行文件后才能正式部署上線的。而我們傳統(tǒng)的 PHP 貌似并沒有這種情況,隨時更新一個文件,丟到服務(wù)器上就可以運行。這個問題就要說到靜態(tài)和動態(tài)語言的問題了。 一般情況下,Java 這類的語言可以歸結(jié)為靜態(tài)語言,它們有固定的變量類型,必須編譯后才能運行,特點是一次加載會直接將代碼加載到內(nèi)存中。典型的就像是我們電腦上的各種應(yīng)用程序,直接執(zhí)行一個程序的 .exe 文件,這個程序就在你的電腦上運行起來了。如果你用文本工具打開這種 exe 或者 Java 的 Jar 文件的話,看到的將是一堆亂碼似的二進制內(nèi)容。 而 PHP 這一類的,則可以歸為動態(tài)語言,特點是變量不用指定類型,隨便一個文件就可以直接運行。相信你一定想到了,Python、JavaScript 都是這樣的運行方式。即使 JS 的 npm 編譯,實際上也只是對代碼進行了混淆和格式化,并沒有完全編譯成一個類似于 jar 包那樣的中間代碼執(zhí)行文件。 對于這兩種語言編譯運行方式來說,靜態(tài)語言將代碼一次加載到內(nèi)存,效率明顯會提升不少,畢竟內(nèi)存和硬盤的速度差距還是蠻大的。而且,靜態(tài)語言會一次性將很多初始對象,類模板文件加載,調(diào)用的時候不用重新再加載實例化,性能就會有更進一步的上升空間。但是,靜態(tài)語言通常都是需要編譯成一個可執(zhí)行的中間文件的,如果有代碼的更新,則必須重啟整個程序。 好吧,動態(tài)語言的優(yōu)缺點很明顯就和靜態(tài)語言是反過來的了。動態(tài)語言每一次運行一個腳本,就需要將所有相關(guān)的文件全部加載一次,而且如果沒別的優(yōu)化的話(比如 OPcache),所有的相關(guān)文件都要從硬盤讀取、加載內(nèi)存、實例化這些步驟中從頭走一遍??上攵男屎托阅苁峭耆珶o法與靜態(tài)語言相比的。但是,優(yōu)點也很明確,隨時修改一個文件就可以隨時上線,線上業(yè)務(wù)不用中斷。 因此,PHP 通常會是創(chuàng)業(yè)公司的首選,因為它方便,更新迭代速度快,對線上業(yè)務(wù)影響小。但當(dāng)公司發(fā)展到一定規(guī)模之后,卻會因為效率性能的問題而容易被 Java、Golang 等語言代替。畢竟,一臺服務(wù)器能夠抗 5 臺服務(wù)器的壓力,成本還是能節(jié)省不少的,更主要的是,公司到一定規(guī)模之后,對于熱更新、規(guī)范化上線等等相關(guān)的操作,也會讓靜態(tài)語言需要編譯或重啟服務(wù)這類問題成為邊緣化的小問題。性能效率往往才是中大型公司更重要的考慮。 上述內(nèi)容只是基于我自己的理解,不代表完全正確,但是大方向應(yīng)該是沒有問題的。想必說到這里,你也能猜到 Swoole 是如何來解決效率性能問題的。它就是通過直接將代碼加載到內(nèi)存的方式,就像 Java 他們一樣來啟動一個進程,實現(xiàn) PHP 代碼的高性能執(zhí)行。同時,盡量保持代碼還是可以按照傳統(tǒng)的方式來寫,為我們 PHP 程序員提供了一個高性能的解決方案。 教程框架這一次的系列教程同樣是文章和視頻形式,我們會分兩個大的模塊。 第一個模塊是以官方文檔為基礎(chǔ),簡單地學(xué)習(xí)了解 Swoole 框架中的各項內(nèi)容,同時盡已所能的解釋一些相關(guān)的計算機和網(wǎng)絡(luò)知識。 第二個模塊就是一個我使用在生產(chǎn)環(huán)境中的 Swoole 框架 Hyperf 的相關(guān)配置使用。這個框架與 Laravel 非常類似,很好入手。如果你已經(jīng)追過之前我們的 Laravel 系列,那么應(yīng)該不會有太大難度。 同樣的,不會有太多的項目實戰(zhàn),畢竟這些東西講得實在是太多了,隨便一搜一大把。 參考資料同樣是以 Swoole 官方文檔以及 Hyperf 官方文檔為基礎(chǔ)。官方文檔永遠(yuǎn)是你學(xué)習(xí)的最重要參考資料,沒有之一,包括我寫的也只是對官方文檔的擴展。 最后,還有說明一下的是,Swoole 是我們國人開發(fā)的:韓天峰 大佬。文檔全中文無壓力,同樣地,Hyperf 也是我們國人大佬開發(fā)的,一樣的純中文文檔。感謝各位大佬們! 總結(jié)好了,剩下的不多說了,讓我們趕緊進入到 Swoole 的世界吧。 ps. 因個人水平有限,在本系列文章教程中,如有錯誤歡迎批評指正! |
|