BusinessWorker類的使用
BusinessWorker類其實(shí)也是基于基礎(chǔ)的Worker開發(fā)的。BusinessWorker是運(yùn)行業(yè)務(wù)邏輯的進(jìn)程,BusinessWorker收到Gateway轉(zhuǎn)發(fā)來(lái)的事件及請(qǐng)求時(shí)會(huì)默認(rèn)調(diào)用Events.php中的onConnect onMessage onClose方法處理事件及數(shù)據(jù),開發(fā)者正是通過實(shí)現(xiàn)這些回調(diào)控制業(yè)務(wù)及流程。
BusinessWorker類可以定制的內(nèi)容
1、name
和Worker一樣,可以設(shè)置BusinessWorker進(jìn)程的名稱,方便status命令中查看統(tǒng)計(jì)
2、count
和Worker一樣,可以設(shè)置BusinessWorker進(jìn)程的數(shù)量,以便充分利用多cpu資源
3、registerAddress,注冊(cè)服務(wù)地址,格式類似于 '127.0.0.1:1236'。如果是部署了多個(gè)register服務(wù)則格式是數(shù)組,類似['192.168.0.1:1236','192.168.0.2:1236']
4、onWorkerStart
和Worker一樣,可以設(shè)置BusinessWorker啟動(dòng)后的回調(diào)函數(shù),一般在這個(gè)回調(diào)里面初始化一些全局?jǐn)?shù)據(jù)
5、onWorkerStop
和Worker一樣,可以設(shè)置BusinessWorker關(guān)閉的回調(diào)函數(shù),一般在這個(gè)回調(diào)里面做數(shù)據(jù)清理或者保存數(shù)據(jù)工作
6、eventHandler
設(shè)置使用哪個(gè)類來(lái)處理業(yè)務(wù),默認(rèn)值是Events
,即默認(rèn)使用Events.php中的Events類來(lái)處理業(yè)務(wù)。業(yè)務(wù)類至少要實(shí)現(xiàn)onMessage靜態(tài)方法,onConnect和onClose靜態(tài)方法可以不用實(shí)現(xiàn)。
范例
Applications\項(xiàng)目\start_businessworker.php
use \Workerman\Worker;
use \GatewayWorker\BusinessWorker;
$worker = new BusinessWorker();
$worker->name = 'ChatBusinessWorker';
$worker->count = 4;
$worker->registerAddress = '127.0.0.1:1236';
/*
* 設(shè)置處理業(yè)務(wù)的類為MyEvent。
* 如果類帶有命名空間,則需要把命名空間加上,
* 類似$worker->eventHandler='\my\namespace\MyEvent';
*/
$worker->eventHandler = 'MyEvent';
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
業(yè)務(wù)處理類 Events
Events類為業(yè)務(wù)處理的入口文件,當(dāng)有客戶端事件發(fā)生時(shí)會(huì)觸發(fā)相應(yīng)的回調(diào)如下:
(注意:Gateway 2.0.4版本以前業(yè)務(wù)處理類為Event,為了避免和Event擴(kuò)展沖突,2.0.4版本以后統(tǒng)一改成Events類)
1、每個(gè)BusinessWorker進(jìn)程啟動(dòng)時(shí),都會(huì)觸發(fā)Events::onWorkerStart($businessworker)
回調(diào)(此特性Gateway版本>=2.0.4才支持)
。
2、當(dāng)客戶端連接到Gateway時(shí),會(huì)觸發(fā)Events::onConnect($client_id)
回調(diào)。
3、當(dāng)客戶端發(fā)來(lái)數(shù)據(jù)時(shí),會(huì)觸發(fā)Events::onMessage($client_id, $data)
回調(diào)。
4、當(dāng)客戶端關(guān)閉時(shí),會(huì)觸發(fā)Events::onClose($client_id)
回調(diào)。
5、每個(gè)BusinessWorker進(jìn)程退出時(shí),都會(huì)觸發(fā)Events::onWorkerStop($businessworker)
回調(diào)(此特性Gateway版本>=2.0.4才支持)
。注意如果進(jìn)程是非正常退出,例如被kill可能無(wú)法觸發(fā)onWorkerStop
。
Events詳細(xì)文檔參見下一節(jié)