Gateway類的使用
文件位置:GatewayWorker/Gateway.php
Gateway類用于初始化Gateway進(jìn)程。Gateway進(jìn)程是暴露給客戶端的讓其連接的進(jìn)程。所有客戶端的請(qǐng)求都是由Gateway接收然后分發(fā)給BusinessWorker處理,同樣BusinessWorker也會(huì)將要發(fā)給客戶端的響應(yīng)通過Gateway轉(zhuǎn)發(fā)出去。
Gateway類是基于基礎(chǔ)的Worker開發(fā)的。可以給Gateway對(duì)象的onWorkerStart、onWorkerStop、onConnect、onClose設(shè)置回調(diào)函數(shù),但是無法給設(shè)置onMessage回調(diào)。Gateway的onMessage行為固定為將客戶端數(shù)據(jù)轉(zhuǎn)發(fā)給BusinessWorker。
初始化
初始化Gateway進(jìn)程類似下面的代碼
$gateway = new Gateway('protocol://ip:port');
其中參數(shù)各參數(shù)含義如下:
protocol:
為應(yīng)用層協(xié)議,目前支持的協(xié)議有
1、websocket協(xié)議
2、text協(xié)議
3、Frame協(xié)議
4、自定義通訊協(xié)議
5、tcp,直接裸tcp,不推薦,見通訊協(xié)議作用。
注意
:GatewayWorker不支持監(jiān)聽Http協(xié)議。但是可以在業(yè)務(wù)中以客戶端的形式通過http協(xié)議(比如curl)訪問遠(yuǎn)程服務(wù)器。
ip:
1、如果寫0.0.0.0代表監(jiān)聽本機(jī)所有網(wǎng)卡,也就是內(nèi)網(wǎng)、外網(wǎng)、本機(jī)都可以訪問到
2、如果是127.0.0.1,代表只能本機(jī)通過127.0.0.1訪問,外網(wǎng)和內(nèi)網(wǎng)都訪問不到
3、如果是內(nèi)網(wǎng)ip例如:192.168.10.11,代表只能通過192.168.10.11訪問,也就是只能內(nèi)網(wǎng)訪問,本機(jī)127.0.0.1也訪問不了(如果監(jiān)聽的ip不屬于本機(jī)則會(huì)報(bào)錯(cuò))
4、如果是外網(wǎng)ip例如110.110.110.110,代表只能通過外網(wǎng)ip 110.110.110.110訪問,內(nèi)網(wǎng)和本機(jī)127.0.0.1都訪問不了(如果監(jiān)聽的ip不屬于本機(jī)則會(huì)報(bào)錯(cuò))
port:
端口不能大于65535,請(qǐng)確認(rèn)端口沒有被其它程序占用,否則啟動(dòng)會(huì)報(bào)錯(cuò)。如果端口小于1024,需要root權(quán)限運(yùn)行GatewayWorker才能有權(quán)限監(jiān)聽,否則報(bào)錯(cuò)沒有權(quán)限。
Gateway類可以定制的內(nèi)容
1、 協(xié)議
和Worker一樣,在初始化Gateway對(duì)象時(shí)設(shè)置Gateway的協(xié)議,例如下面設(shè)置Gateway的通訊協(xié)議為websocket
use \GatewayWorker\Gateway;
require_once './Workerman/Autoloader.php';
// 指定websocket協(xié)議
$gateway = new Gateway("websocket://0.0.0.0:8585");
...
2、name
和Worker一樣,可以設(shè)置Gateway進(jìn)程的名稱,方便status命令中查看統(tǒng)計(jì)
3、count
和Worker一樣,可以設(shè)置Gateway進(jìn)程的數(shù)量,一般一臺(tái)服務(wù)器設(shè)置1-2個(gè)足夠,設(shè)置多了對(duì)性能有一定影響。
4、lanIp
lanIp是Gateway所在服務(wù)器的內(nèi)網(wǎng)IP,默認(rèn)填寫127.0.0.1即可。多服務(wù)器分布式部署的時(shí)候需要填寫真實(shí)的內(nèi)網(wǎng)ip,不能填寫127.0.0.1。注意:lanIp只能填寫真實(shí)ip,不能填寫域名或者其它字符串,無論如何都不能寫0.0.0.0 .
5、startPort
Gateway進(jìn)程啟動(dòng)后會(huì)監(jiān)聽一個(gè)本機(jī)端口,用來給BusinessWorker提供鏈接服務(wù),然后Gateway與BusinessWorker之間就通過這個(gè)連接通訊。這里設(shè)置的是Gateway監(jiān)聽本機(jī)端口的起始端口。比如啟動(dòng)了4個(gè)Gateway進(jìn)程,startPort為2000,則每個(gè)Gateway進(jìn)程分別啟動(dòng)的本地端口一般為2000、2001、2002、2003。
當(dāng)本機(jī)有多個(gè)Gateway/BusinessWorker項(xiàng)目時(shí),需要把每個(gè)項(xiàng)目的startPort設(shè)置成不同的段
6、registerAddress,注冊(cè)服務(wù)地址,格式類似于 '127.0.0.1:1236'。如果是部署了多個(gè)register服務(wù)則格式是數(shù)組,類似['192.168.0.1:1236','192.168.0.2:1236']
7、心跳設(shè)置,具體說明見心跳一節(jié)
8、onWorkerStart
和Worker一樣,可以設(shè)置Gateway進(jìn)程啟動(dòng)后的回調(diào)函數(shù),一般在這個(gè)回調(diào)里面初始化一些全局?jǐn)?shù)據(jù)
9、onWorkerStop
和Worker一樣,可以設(shè)置Gateway進(jìn)程關(guān)閉的回調(diào)函數(shù),一般在這個(gè)回調(diào)里面做數(shù)據(jù)清理或者保存數(shù)據(jù)工作
10、onConnect(比較少用到,開發(fā)者一般不用關(guān)注)
和Worker一樣,可以設(shè)置onConnect回調(diào),當(dāng)有客戶端連接上來時(shí)觸發(fā)。與Events::onConnect的區(qū)別是Events::onConnect運(yùn)行在BusinessWorker進(jìn)程上。Gateway::onConnect是運(yùn)行在Gateway進(jìn)程上,無法使用\GatewayWorker\Lib\Gateway類提供的接口
11、onClose(比較少用到,開發(fā)者一般不用關(guān)注)
和Worker一樣,可以設(shè)置onClose回調(diào),當(dāng)有客戶端連接關(guān)閉時(shí)觸發(fā)。同樣與Events::onClose的區(qū)別是Gateway::onClose是運(yùn)行在Gateway進(jìn)程上,無法使用\GatewayWorker\Lib\Gateway類提供的接口