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