在cmd下執(zhí)行 php test.php,可以正常收發(fā)數(shù)據(jù)。
但指令是由用戶發(fā)送,所以要用PHP寫個(gè)接口獲取用戶的指令,然后運(yùn)行workerman返回指令對(duì)應(yīng)的數(shù)據(jù)。
想請(qǐng)教下接口獲取用戶發(fā)來(lái)的指令后,怎么運(yùn)行workerman?
監(jiān)聽一個(gè)http協(xié)議的端口,是先new一個(gè)woker,然后在這個(gè)worker的onMessage 中再new AsncTcpConnection,這個(gè)我之前試過(guò)了,報(bào)錯(cuò)說(shuō)window下不支持同時(shí)實(shí)例化多個(gè)worker,是這樣嗎?
你__construct源碼里
$this->worker = new Worker();
改成
$this->worker = new Worker('http://0.0.0.0:8585');
$this->worker->onMessage = array($this, 'onMessage');
然后給Bases寫一個(gè)onMessage方法。
是這個(gè)意思嗎,onMessage里面寫什么內(nèi)容,跟start方法怎么關(guān)聯(lián)?
public function __construct($url,$base,$orderArr = []){
$this -> url = $url;
$this -> base = $base;
$this -> orderArr = $orderArr;
$this->worker = new Worker('http://0.0.0.0:8585');
$this->worker->onMessage = array($this, 'onMessage');
$this -> worker -> name = 'normal';
$this -> start();
}
public function onMessage(){
//這里面寫什么內(nèi)容?
}
public function start(){
$this -> worker -> onWorkerStart = function(){
$con = new AsyncTcpConnection($this -> url);
//其他代碼
}
}
onMessage 不需要參數(shù)吧,我現(xiàn)在直接實(shí)例化傳參,然后命令行運(yùn)行test.php,一點(diǎn)反應(yīng)都沒有。
突然又感覺懵了,我是這樣理解的,您給看看理解得對(duì)不對(duì)。
要想實(shí)現(xiàn)我說(shuō)的功能,就得在onMessage里面使用AsyncTcpConnection才行。
但onMessage的作用是當(dāng)Workerman收到數(shù)據(jù)時(shí)才觸發(fā)。
所以是不是需要再寫一個(gè)onConnect,用來(lái)接收用戶發(fā)送的指令發(fā)給服務(wù)器。
這樣在AsyncTcpConnection的onConnect中就不需要發(fā)送指令到服務(wù)器,只需在onMessage里面獲取服務(wù)器返回的數(shù)據(jù),然后進(jìn)行數(shù)據(jù)庫(kù)操作就行了。
是這個(gè)意思嗎?
或者說(shuō)不需要再寫onConnect,還是在AsyncTcpConnection的onConnect中向服務(wù)器發(fā)指令,在onMessage中獲取返回的數(shù)據(jù)?
如果不需要再寫onConnect,還是在AsyncTcpConnection的onConnect中向服務(wù)器發(fā)指令,在onMessage中獲取返回的數(shù)據(jù),這樣寫對(duì)嗎?
public function __construct($url,$base,$orderArr = []){
$this -> url = $url;
$this -> base = $base;
$this -> orderArr = $orderArr;
$this -> worker = new Worker('http://0.0.0.0:8585');
$this -> worker -> onMessage = array($this,'onMessage');
$this -> worker -> name = 'normal';
$this-> onMessage(); //是這樣觸發(fā)onMessage方法?
}
public function onMessage(){
$this -> worker -> onMessage = function(){ //是onMessage還是onWorkerStart
$con = new AsyncTcpConnection($this -> url);
$con -> onConnect = function($con){
//拼接、發(fā)送指令
};
$con -> onMessage = function($con,$returnDatas){
//獲取服務(wù)器返回的數(shù)據(jù),進(jìn)行數(shù)據(jù)庫(kù)操作
};
};
Worker ::runAll();
}
我按照上面的方法試了,還是和之前接口返回的一樣,請(qǐng)求超時(shí),是哪沒理解寫錯(cuò)了嗎,我總感覺快寫出來(lái)了,麻煩您再指點(diǎn)一下吧。