序言
Workerman,高性能PHP應(yīng)用容器
Workerman是什么?
Workerman是一款純PHP開發(fā)的開源高性能的PHP 應(yīng)用容器。
Workerman不是重復(fù)造輪子,它不是一個(gè)MVC框架,而是一個(gè)更底層更通用的服務(wù)框架,你可以用它開發(fā)tcp代理、梯子代理、做游戲服務(wù)器、郵件服務(wù)器、ftp服務(wù)器、甚至開發(fā)一個(gè)php版本的redis、php版本的數(shù)據(jù)庫(kù)、php版本的nginx、php版本的php-fpm等等。Workerman可以說是PHP領(lǐng)域的一次創(chuàng)新,讓開發(fā)者徹底擺脫了PHP只能做WEB的束縛。
實(shí)際上Workerman類似一個(gè)PHP版本的nginx,核心也是多進(jìn)程+Epoll+非阻塞IO。Workerman每個(gè)進(jìn)程能維持上萬并發(fā)連接。由于本身常駐內(nèi)存,不依賴Apache、nginx、php-fpm這些容器,擁有超高的性能。同時(shí)支持TCP、UDP、UNIXSOCKET,支持長(zhǎng)連接,支持Websocket、HTTP、WSS、HTTPS等通訊協(xié)議以及各種自定義協(xié)議。擁有定時(shí)器、異步socket客戶端、異步Redis、異步Http、異步消息隊(duì)列等眾多高性能組件。
Workerman的一些應(yīng)用方向
Workerman不同于傳統(tǒng)MVC框架,Workerman不僅可以用于Web開發(fā),同時(shí)還有更廣闊的應(yīng)用領(lǐng)域,例如即時(shí)通訊類、物聯(lián)網(wǎng)、游戲、服務(wù)治理、其它服務(wù)器或者中間件,這無疑大大提高了PHP開發(fā)者的視野。目前這些領(lǐng)域的PHP開發(fā)者奇缺,如果想在PHP領(lǐng)域有自己的技術(shù)優(yōu)勢(shì),不滿足于每天的增刪改查工作,或者想向架構(gòu)師方向或者技術(shù)大牛的方向發(fā)展,Workerman都是非常值得學(xué)習(xí)的框架。建議開發(fā)者不僅會(huì)用,而且能基于Workerman開發(fā)出屬于自己的開源項(xiàng)目,提升技能增加自己的影響力,比如Beanbun多進(jìn)程網(wǎng)絡(luò)爬蟲框架就是一個(gè)很好的例子,剛剛上線不久就獲得眾多好評(píng)。
Workerman的一些應(yīng)用方向如下:
1、即時(shí)通訊類
例如網(wǎng)頁(yè)即時(shí)聊天、即時(shí)消息推送、微信小程序、手機(jī)app消息推送、PC軟件消息推送等等
[示例 workerman-chat聊天室 、 web消息推送 、 小蝌蚪聊天室]
2、物聯(lián)網(wǎng)類
例如Workerman與打印機(jī)通訊、與單片機(jī)通訊、智能手環(huán)、智能家居、共享單車等等。
[客戶案例如 易聯(lián)云、易泊時(shí)代等]
3、游戲服務(wù)器類
例如棋牌游戲、MMORPG游戲等等。[示例 browserquest-php]
4、HTTP服務(wù)
例如 寫高性能HTTP接口、高性能網(wǎng)站。如果想要做HTTP相關(guān)的服務(wù)或者站點(diǎn)強(qiáng)烈推薦 webman
5、SOA服務(wù)化
利用Workerman將現(xiàn)有業(yè)務(wù)不同功能單元封裝起來,以服務(wù)的形式對(duì)外提供統(tǒng)一的接口,達(dá)到系統(tǒng)松耦合、易維護(hù)、高可用、易伸縮。[示例 workerman-json-rpc、 workerman-thrift]
6、其它服務(wù)器軟件
例如 GatewayWorker,PHPSocket.IO,http代理,sock5代理,分布式通訊組件,分布式變量共享組件,消息隊(duì)列、DNS服務(wù)器、WebServer、CDN服務(wù)器、FTP服務(wù)器等等
7、組件
例如異步redis,異步http客戶端,物聯(lián)網(wǎng)mqtt客戶端,消息隊(duì)列 workerman/redis-queue 、 workerman/stomp、workerman/rabbitmq ,文件監(jiān)控組件,還有很多第三方開發(fā)的組件框架等等
顯然傳統(tǒng)的mvc框架很難實(shí)現(xiàn)以上的功能,所以也就是workerman誕生的原因。
Workerman理念
極簡(jiǎn)、穩(wěn)定、高性能、分布式。
極簡(jiǎn)
小即是美,Workerman內(nèi)核極簡(jiǎn),僅有幾個(gè)php文件并且只暴露幾個(gè)接口,學(xué)習(xí)起來非常簡(jiǎn)單。所有其它功能通過組件的方式擴(kuò)展。
Workerman擁有完善的文檔+權(quán)威的主頁(yè)+活躍的社區(qū)+數(shù)個(gè)千人QQ群+眾多的高性能組件+N多的例子,這一切都讓開發(fā)者使用起來更得心應(yīng)手。
穩(wěn)定
Workerman已經(jīng)開源數(shù)年,被很多上市公司大規(guī)模使用,超級(jí)穩(wěn)定。有些服務(wù)2年多沒重啟過仍然在飛速運(yùn)行。沒有coredump、沒有內(nèi)存泄漏、沒有bug。
高性能
Workerman因?yàn)槌qv內(nèi)存,本身不依賴apache/nginx/php-fpm,沒有容器到PHP的通訊開銷,沒有每個(gè)請(qǐng)求初始化一切又銷毀一切的開銷,具有超高的性能,比起傳統(tǒng)的MVC框架,性能要高數(shù)十倍,PHP7下通過ab壓力測(cè)試QPS甚至高于單獨(dú)的nginx。
分布式
現(xiàn)在早已經(jīng)不是單槍匹馬的時(shí)代了,單臺(tái)服務(wù)器性能再?gòu)?qiáng)悍也有極限,分布式多服務(wù)器部署才是王道。Workerman直接提供了一套長(zhǎng)連接分布式通訊方案GatewayWorker框架,加服務(wù)器只需要簡(jiǎn)單配置下然后啟動(dòng)即可,業(yè)務(wù)代碼零更改,系統(tǒng)承載能力成倍增加。如果你是開發(fā)TCP長(zhǎng)連接應(yīng)用,建議直接用GatewayWorker,它是對(duì)Workerman的一個(gè)包裝,針對(duì)長(zhǎng)連接應(yīng)用提供了更豐富的接口以及強(qiáng)悍的分布式處理能力。
本手冊(cè)作用范圍
Workerman 3.x - 5.x 版本
windows用戶(必讀)
workerman同時(shí)支持linux系統(tǒng)及windows系統(tǒng)。windows版本workerman本身不依賴任何擴(kuò)展,只需要配置好PHP環(huán)境變量即可,windows版本workerman安裝及注意事項(xiàng)參見windows用戶必看。
客戶端
Workerman的通信協(xié)議是開放的,又是可定制的,因此,理論上Workerman可以與使用任意協(xié)議的任意平臺(tái)的客戶端進(jìn)行通信。當(dāng)用戶開發(fā)客戶端時(shí),可以根據(jù)相應(yīng)的通信協(xié)議完成與服務(wù)端的通信。