在cmd下執(zhí)行 php test.php,可以正常收發(fā)數(shù)據(jù)。
但指令是由用戶發(fā)送,所以要用PHP寫個接口獲取用戶的指令,然后運行workerman返回指令對應(yīng)的數(shù)據(jù)。
想請教下接口獲取用戶發(fā)來的指令后,怎么運行workerman?
監(jiān)聽一個http協(xié)議的端口,是先new一個woker,然后在這個worker的onMessage 中再new AsncTcpConnection,這個我之前試過了,報錯說window下不支持同時實例化多個worker,是這樣嗎?
你__construct源碼里
$this->worker = new Worker();
改成
$this->worker = new Worker('http://0.0.0.0:8585');
$this->worker->onMessage = array($this, 'onMessage');
然后給Bases寫一個onMessage方法。
是這個意思嗎,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);
//其他代碼
}
}
突然又感覺懵了,我是這樣理解的,您給看看理解得對不對。
要想實現(xiàn)我說的功能,就得在onMessage里面使用AsyncTcpConnection才行。
但onMessage的作用是當Workerman收到數(shù)據(jù)時才觸發(fā)。
所以是不是需要再寫一個onConnect,用來接收用戶發(fā)送的指令發(fā)給服務(wù)器。
這樣在AsyncTcpConnection的onConnect中就不需要發(fā)送指令到服務(wù)器,只需在onMessage里面獲取服務(wù)器返回的數(shù)據(jù),然后進行數(shù)據(jù)庫操作就行了。
是這個意思嗎?
或者說不需要再寫onConnect,還是在AsyncTcpConnection的onConnect中向服務(wù)器發(fā)指令,在onMessage中獲取返回的數(shù)據(jù)?
如果不需要再寫onConnect,還是在AsyncTcpConnection的onConnect中向服務(wù)器發(fā)指令,在onMessage中獲取返回的數(shù)據(jù),這樣寫對嗎?
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ù),進行數(shù)據(jù)庫操作
};
};
Worker ::runAll();
}