黄p网站_在线看中文字幕_亚洲电影免费观看_成人激情视频_欧美成视频_中国av在线

初識 Swoole

前言


在之前的教程當(dāng)中我們已經(jīng)了解到了php的幾種運(yùn)行模式:

  • CGI 通用網(wǎng)關(guān)接口(Common Gateway Interface)
  • Fast-CGIcgi的升級版本,用 PHP-FPM(FastCGI Process Manager)fast-cgi 進(jìn)程管理器
  • mod 以模塊的形式集成進(jìn) Apache 中,接受 Apache 提供的.php文件,并進(jìn)行解析。
  • CLI 命令行模式,直接使用 PHP 去執(zhí)行.php文件時(shí)便是此模式。

盡管 CLI 模式可以完成更多有趣和強(qiáng)大的功能,但大多數(shù)php程序員很少使用 CLI 模式。

起源

Swoole是Rango在2010年底,因?yàn)楣緲I(yè)務(wù)需要自己實(shí)現(xiàn)一個(gè)Tcp Socket Server 實(shí)現(xiàn)SMT P協(xié)議接收數(shù)據(jù),但是在當(dāng)時(shí)PHP在這個(gè)領(lǐng)域幾乎是一片空白,所以Rango自己學(xué)習(xí),最終完成了需求;隨后便開源了此套系統(tǒng),希望能幫助其他PHPer解決在這個(gè)領(lǐng)域的問題,讓PHP從單純的Web開發(fā)擴(kuò)展到更大的空間。

以下內(nèi)容來自于Swoole官方文檔

項(xiàng)目起源
Swoole 項(xiàng)目最初的想法是來自于之前所做的一個(gè)企業(yè)軟件項(xiàng)目。當(dāng)時(shí)大概是2010年底,公司產(chǎn)品有一個(gè)需求是用戶可以任意生成一個(gè) email 地址,然后其他用戶可以向這個(gè)email發(fā)郵件,后臺能實(shí)時(shí)將郵件內(nèi)容解析成數(shù)據(jù),并主動通知用戶。當(dāng)時(shí)項(xiàng)目使用PHP開發(fā)的,在實(shí)現(xiàn)這個(gè)需求時(shí)遇到了難題,PHP只能依賴其他的STMP服務(wù)器,通過pop3協(xié)議定時(shí)查收新郵件來完成,這樣就不是實(shí)時(shí)的。如果要實(shí)現(xiàn)的實(shí)時(shí)系統(tǒng)必須自己寫一個(gè)TCP Socket Server實(shí)現(xiàn)SMTP協(xié)議接收數(shù)據(jù)。當(dāng)時(shí)PHP在這個(gè)領(lǐng)域幾乎是空白,沒有一套成熟的網(wǎng)絡(luò)通信框架。為了實(shí)現(xiàn)需求,我從socket學(xué)起到TCP/IP、IO復(fù)用、libevent、多進(jìn)程,最后終于實(shí)現(xiàn)了這套程序。做完這個(gè)項(xiàng)目后我就想把這套程序開源出來,希望能幫助其他PHPer解決在這個(gè)領(lǐng)域的難題。如果能有這樣一個(gè)框架,那么PHP就能從單純地做一個(gè)Web網(wǎng)站延伸到更大的空間。

還有一個(gè)重要的原因是PHP程序的性能問題,我最早是學(xué)Java出身的,工作后才轉(zhuǎn)行成為一名PHP程序員。在使用PHP開發(fā)程序的過程中,我一直在思考的問題 PHP 和 Java 比最大的優(yōu)勢是什么?簡單高效, PHP 在請求完成之后會釋放所有資源和內(nèi)存,無須擔(dān)心內(nèi)存泄漏。代碼的質(zhì)量無論高低一樣運(yùn)行的很流暢。但同時(shí)這也是 PHP 致命的缺點(diǎn)。一旦請求數(shù)量上升,并發(fā)很高的時(shí)候,快速創(chuàng)建資源,又馬上釋放,使得 PHP 程序運(yùn)行效率急劇下降。另外一旦項(xiàng)目的功能的越來越復(fù)雜,代碼增多后,對于 PHP 也會是災(zāi)難。這也是 PHP 的框架為什么沒有被 PHP 程序員廣泛接受,而 Java 不存在這個(gè)問題。再好的框架也會被這種低效的方式拖累,導(dǎo)致系統(tǒng)變慢。所以想到了使用 PHP 來開發(fā) PHP 的應(yīng)用服務(wù)器,讓 PHP 的代碼加載到內(nèi)存后,擁有更長的生命周期,這樣建立的數(shù)據(jù)庫連接和其他大的對象,不被釋放。每次請求只需要處理很少的代碼,而這些代碼只在第一次運(yùn)行時(shí),被 PHP 解析器編譯,駐留內(nèi)存。另外,之前 PHP 不能實(shí)現(xiàn)的,對象持久化、數(shù)據(jù)庫連接池,緩存連接池都可以實(shí)現(xiàn)。系統(tǒng)的運(yùn)行效率會大大提高。

經(jīng)過一段時(shí)間研究,目前已經(jīng)初步得到實(shí)現(xiàn)。使用 PHP 本身編寫出 HTTP 服務(wù)器,以獨(dú)立服務(wù)器方式運(yùn)行,單個(gè)程序頁面 ( 有對象生成,數(shù)據(jù)庫連接、 smarty 模板操作 ) 的執(zhí)行時(shí)間由原來的 0.0x 秒,下降到 0.00x 秒。使用 Apache AB 并發(fā) 100 測試。比傳統(tǒng) LAMP 方式, Request per Second 高出至少 10 倍。在我的測試機(jī)上 (Ubuntu10.04 Inter Core E5300 + 2G 內(nèi)存 ) , Apache 只跑到 83RPS 。 Swoole Server 可以跑到 1150 多 RPS。

這個(gè)項(xiàng)目就是Swoole的雛形。這個(gè)版本一直持續(xù)維護(hù)了2年多,在這個(gè)過程中逐步有了一些經(jīng)驗(yàn)積累,對這套技術(shù)方案的存在問題有了更深入的理解,比如性能差、限制較多無法直接調(diào)用操作系統(tǒng)接口、內(nèi)存管理效率低下。

入職騰訊
2011年底我入職騰訊,負(fù)責(zé)朋友網(wǎng)的PHP平臺開發(fā)工作。驚奇地發(fā)現(xiàn)朋友網(wǎng)的同事不光這樣想了,他們直接做到了。朋友網(wǎng)團(tuán)隊(duì)已經(jīng)在生產(chǎn)環(huán)境中使用了這套方案。朋友網(wǎng)有三架馬車,第一個(gè)是PWS,這是一個(gè)純PHP編寫的WebServer,朋友網(wǎng)線上有600多臺服務(wù)器運(yùn)行在PWS上,完全沒有使用Apache、PHP-FPM之類的程序。第二個(gè)是SAPS,這是使用純PHP開發(fā)的一個(gè)分布式隊(duì)列,當(dāng)時(shí)大概由150臺服務(wù)器的集群在跑,很多圖片裁剪、頭像處理、消息同時(shí)、數(shù)據(jù)同步等邏輯全部使用了SAPS做邏輯異步化。第三個(gè)是PSF,這是一個(gè)PHP實(shí)現(xiàn)的Server框架,朋友網(wǎng)很多邏輯層的服務(wù)器都是基于PSF實(shí)現(xiàn)的。大概有300臺左右的集群在運(yùn)行PSF服務(wù)器程序。在朋友網(wǎng)的這段時(shí)間,我學(xué)到了很多Linux底層、網(wǎng)絡(luò)通信的知識,積累了很多大型集群高并發(fā)環(huán)境的網(wǎng)絡(luò)通信跟蹤、調(diào)試經(jīng)驗(yàn),為開發(fā)Swoole打下了一個(gè)很好的基礎(chǔ)。

開發(fā)Swoole
在這期間也學(xué)習(xí)了解到了Node.js、Golang這些優(yōu)秀的技術(shù)方案,得到了更多靈感。在2012年的時(shí)候就有了新的想法,決定使用C語言重新實(shí)現(xiàn)一個(gè)性能更強(qiáng)、功能更強(qiáng)大的版本。這就是現(xiàn)在的Swoole擴(kuò)展。

現(xiàn)在Swoole已經(jīng)被很多PHP技術(shù)團(tuán)隊(duì)用于實(shí)際項(xiàng)目的開發(fā)工作,國內(nèi)國外都有。國內(nèi)知名的有百度訂單中心、百度地圖、騰訊QQ公眾號和企業(yè)QQ、戰(zhàn)旗直播、360、當(dāng)當(dāng)網(wǎng)、窮游等。另外還有很多物聯(lián)網(wǎng)、硬件、游戲項(xiàng)目也在使用Swoole 。另外基于Swoole的開源框架也越來越多,比如TSF、Blink、swPromise 等等,在Github上也能找到很多Swoole相關(guān)的項(xiàng)目和代碼。

名字由來
Swoole這個(gè)名字不是一個(gè)英文單詞,是由我創(chuàng)造的一個(gè)音近字。我最早想到的名字是叫做 sword-server,寓意是為廣大PHPer創(chuàng)造一把鋒利的劍,后來聯(lián)想到 google 也是憑空創(chuàng)造出來的,所以我就給它命名為 swoole

現(xiàn)在


隨著Swoole進(jìn)入4.0時(shí)代,原2.0時(shí)期協(xié)程的各種各樣的坑,在4.0都得到了解決。 如今的Swoole可以說是真正好用可靠的PHP異步網(wǎng)絡(luò)引擎。

2018年7月Rango辭去工作,組織了全職的研發(fā)團(tuán)隊(duì)來開發(fā) Swoole 內(nèi)核、組件和工具鏈。在文檔、測試、社區(qū)運(yùn)營方面也會投入更多資源。本段來源

Swoole 能做什么


以下內(nèi)容來源于Swoole官方文檔
Swoole 是使用 CC++ 語言編寫的PHP擴(kuò)展, 內(nèi)置了異步非阻塞、多線程的網(wǎng)絡(luò)IO服務(wù)器,PHP程序員僅需處理事件回調(diào)即可,無需關(guān)心底層。

同時(shí)Swoole也提供了許多非常多的內(nèi)置功能如:

  • PHP語言的異步多線程服務(wù)器
  • 異步TCP/UDP網(wǎng)絡(luò)客戶端
  • 異步MySQL
  • 異步Redis
  • 數(shù)據(jù)庫連接池
  • AsyncTask
  • 消息隊(duì)列
  • 毫秒定時(shí)器
  • 異步文件讀寫
  • 異步DNS查詢
  • Http/WebSocket服務(wù)器端/客戶端
  • Http2.0服務(wù)器端/客戶端

與大家熟知的 Workerman 框架不同,Swoole更像是一個(gè)基礎(chǔ)庫給了開發(fā)者一把無比鋒利的寶劍,可以按照自己想要的方法去使用。

Swoole絕大部分功能都只能運(yùn)行在 CLI 模式下,也正因?yàn)榇碎_發(fā)者可以完全的掌控Server的一切,與傳統(tǒng)的 php-fpm 模式不同,Swoole需要開發(fā)者自行接管各種相關(guān)事件,和管理變量的生命周期等。

與傳統(tǒng)Web開發(fā)的區(qū)別


我們知道 php-fpmfast-cgi 運(yùn)行模式的進(jìn)程管理器,當(dāng)啟動Server時(shí) php-fpm 會預(yù)創(chuàng)建若干個(gè) fast-cgi 處理進(jìn)程; 每當(dāng)請求到達(dá) Nginx 時(shí) Nginx 檢查到請求的是.php文件時(shí),就將請求轉(zhuǎn)發(fā)給 php-fpm Server 然后由 php-fpm 交給某個(gè)空閑的進(jìn)程處理,當(dāng)處理完成后由 php-fpm 返回給 Nginx 然后由 Nginx 響應(yīng)給用戶。

傳統(tǒng)PHP開發(fā)者幾乎無需關(guān)注這其中發(fā)生的過程甚至根本不了解,正所謂成也蕭何敗蕭何,一方面雖然降低了開發(fā)者入門的門檻但另一方面也使得大量的PHP開發(fā)者幾乎不了解也不懂的真正的服務(wù)端開發(fā)。

SwooleServer 則是相當(dāng)于取代了 php-fpm 作為管理器的位置, 由于Swoole 是運(yùn)行在 CLI 模式下, 所以可以常駐運(yùn)行和以守護(hù)進(jìn)程運(yùn)行, 但也正因?yàn)槿绱耍残枰_發(fā)者自行處理變量的銷毀及各種異常和超時(shí)的處理。

主站蜘蛛池模板: 精品国偷自产国产一区 | 一级片在线观看 | 精品国产不卡一区二区三区 | 成人国产精品视频 | 三级黄色片在线免费观看 | 久久伊| 99精品欧美一区二区三区综合在线 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产成人精品一区二区视频免费 | 欧美综合久久 | 国产高清免费 | 欧美在线高清 | 日批免费在线观看 | 精品国产乱码久久久久久影片 | 国产日韩一区二区 | 99在线精品视频 | 色黄视频在线观看 | 99热手机在线观看 | 久久精品中文字幕 | 日韩性精品 | 免费观看一级特黄欧美大片 | 国产精品一区二区三区在线看 | 欧美性猛交一区二区三区精品 | 欧美精品一区二区三区蜜桃视频 | 国产精品大片在线观看 | 国产一区二区三区不卡在线观看 | 超碰国产在线 | 日本一区二区不卡 | 欧美乱操 | 99小视频| 97人人做人人人难人人做 | 欧美一区精品 | 亚洲综合精品 | 久久99国产精品久久99大师 | 亚洲高清视频在线 | 欧美国产精品一区二区三区 | 国产精品原创巨作av | 91久久精品国产91久久性色tv | 综合亚洲精品 | 精品福利av导航 | 久草在线|