GatewayWorker特性
1、基于Workerman開發(fā)
GatewayWorker是基于Workerman開發(fā)的
2、基于Gateway、Worker進(jìn)程模型
GatewayWorker使用經(jīng)典的Gateway和Worker進(jìn)程模型。Gateway進(jìn)程負(fù)責(zé)維持客戶端連接,并轉(zhuǎn)發(fā)客戶端的數(shù)據(jù)給Worker進(jìn)程處理;Worker進(jìn)程負(fù)責(zé)處理實(shí)際的業(yè)務(wù)邏輯,并將結(jié)果推送給對應(yīng)的客戶端。Gateway服務(wù)和Worker服務(wù)可以分開部署在不同的服務(wù)器上,實(shí)現(xiàn)分布式集群。
3、支持分布式部署
GatewayWorker可以非常方便實(shí)現(xiàn)分布式部署,Gateway服務(wù)和Worker服務(wù)都可以分開部署在不同的服務(wù)器集群上。并且操作簡單、容易擴(kuò)容、上下線用戶無感知。
4、支持高并發(fā)
Gateway進(jìn)程只負(fù)責(zé)網(wǎng)絡(luò)IO,Worker進(jìn)程負(fù)責(zé)業(yè)務(wù)邏輯。其中每個(gè)Gateway進(jìn)程可以維持上萬的并發(fā)連接,多個(gè)Gateway進(jìn)程可以維持?jǐn)?shù)十萬甚至百萬的并發(fā)連接,Gateway集群則可以維持千萬級別的并發(fā)連接。
5、支持全局廣播或者向任意客戶端推送數(shù)據(jù)
GatewayWorker提供非常方便的API,可以全局廣播數(shù)據(jù)、可以向某個(gè)群體廣播數(shù)據(jù)、也可以向某個(gè)特定客戶端推送數(shù)據(jù)。配合Workerman的定時(shí)器,也可以定時(shí)推送數(shù)據(jù)。
6、支持各種應(yīng)用層協(xié)議
WorkerMan接口上支持各種應(yīng)用層協(xié)議,包括自定義協(xié)議。同樣GatewayWorker也支持各種應(yīng)用層協(xié)議。
7、多協(xié)議支持
有時(shí)應(yīng)用客戶端所使用的協(xié)議不止一種,例如PC網(wǎng)頁客戶端使用的是WebSocket協(xié)議,而手機(jī)App使用的是其它協(xié)議。GatewayWorker可以非常方便的支持多協(xié)議,只需要以不同的協(xié)議開不同的端口即可,業(yè)務(wù)代碼無需改動(dòng)。
8、支持對象或者資源永久保持
WorkerMan在運(yùn)行過程中只會(huì)載入解析一次PHP文件,然后便常駐內(nèi)存,這使得類及函數(shù)聲明、PHP執(zhí)行環(huán)境、符號表等不會(huì)重復(fù)創(chuàng)建銷毀,這與Web容器下運(yùn)行的PHP機(jī)制是完全不同的。在WorkerMan中,一個(gè)進(jìn)程生命周期內(nèi)靜態(tài)成員或者全局變量在不主動(dòng)銷毀的情況下是永久保持的,也就是將對象或者鏈接等資源放到全局變量或者類靜態(tài)成員中則整個(gè)進(jìn)程生命周期內(nèi)的所有請求都可以復(fù)用。例如只要單個(gè)進(jìn)程內(nèi)初始化一次數(shù)據(jù)庫連接,則以后這個(gè)進(jìn)程的所有請求都可以復(fù)用這個(gè)數(shù)據(jù)庫連接,避免了頻繁連接數(shù)據(jù)庫過程中TCP三次握手、 數(shù)據(jù)庫權(quán)限驗(yàn)證、斷開連接時(shí)TCP四次握手的過程,極大的提高了應(yīng)用程序效率。
9、高性能
由于php文件從磁盤讀取解析一次后便會(huì)常駐內(nèi)存,下次使用時(shí)直接使用內(nèi)存中的opcode, 極大的減少了磁盤IO及PHP中請求初始化、創(chuàng)建執(zhí)行環(huán)境、詞法解析、語法解析、編譯opcode、請求關(guān)閉等諸多耗時(shí)過程, 并且不依賴nginx、apache等容器,少了nginx等容器與PHP通信的開銷,最主要的是資源可以永久保持,不必每次初始化數(shù)據(jù)庫連接等等, 所以使用WorkerMan開發(fā)應(yīng)用程序,性能非常高。
10、支持HHVM
支持在HHVM虛擬機(jī)上運(yùn)行,可成倍提升PHP性能。尤其是在cpu密集運(yùn)算業(yè)務(wù)中,性能非常優(yōu)異,是PHP Zend虛擬機(jī)8倍左右。通過實(shí)際壓力測試對比,在沒有負(fù)載業(yè)務(wù)的情況下,WorkerMan在HHVM下運(yùn)行比在Zend PHP5.6運(yùn)行網(wǎng)絡(luò)吞吐量提高了30-80%左右
11、方便與其它項(xiàng)目集成
針對其它項(xiàng)目,GatewayWorker提供推送非常簡單方便的API,可以在任何項(xiàng)目中使用這個(gè)API向所有客戶端或者特定客戶端推送數(shù)據(jù),比如在普通Web項(xiàng)目中推送數(shù)據(jù)。
12、支持代碼熱更新
可以reload Worker進(jìn)程實(shí)現(xiàn)業(yè)務(wù)代碼更新升級,而不必?fù)?dān)心客戶端連接會(huì)斷開,因?yàn)榭蛻舳诉B接都由Gateway進(jìn)程維持。
13、支持長連接
GatewayWorker主要用于長連接即時(shí)通訊應(yīng)用。如游戲服務(wù)器、物聯(lián)網(wǎng)云服務(wù)、IM、移動(dòng)應(yīng)用等。