用workerman的mqtt做為客戶端,mqtt服務(wù)端是集群,連接任何一臺(tái)都可以接收數(shù)據(jù),我的問(wèn)題是,如何onClose或者onError的時(shí)候沖連另一臺(tái)服務(wù)器。
即做到只要一臺(tái)出問(wèn)題,自動(dòng)重連服務(wù)器隊(duì)列里的任何一臺(tái)。
新的ip需要 new 新的Client,要不然地址傳不進(jìn)來(lái),而這時(shí)候就報(bào) 類重復(fù)加載錯(cuò)誤。因?yàn)槌qv內(nèi)存的問(wèn)題。
$mqtt = new Client($adress, $connArr);
$mqtt->count=5;
$mqtt->onClose = function($mqtt)
{
$mqtt->close();
$adress='xxx';
$connArr=array(
'username' => 'xxxx',
'password' => 'xxxx',
'debug' => true
);
$mqttBack = new Client($adress, $connArr);
};
下面這段代碼能實(shí)現(xiàn)上面的功能,測(cè)試過(guò)了,就不知道還有什么坑。
$worker->onWorkerStart = function(){
global $mqtt,$mqttBack;
$mqtt->count=5;
$mqtt->onConnect = function($mqtt) {
$mqtt->subscribe('logs/Test');
};
$mqtt->onMessage = function($topic, $content){
echo "topic:$topic content:$content\n";
};
$mqtt->onClose = function($mqtt)
{
global $mqttBack;
$mqttBack->connect();
};
$mqtt->connect();
//備用地址部分。
$mqttBack->count=5;
$mqttBack->onConnect = function($mqttBack) {
$mqttBack->subscribe('logs/Test');
};
$mqttBack->onMessage = function($topic, $content){
echo "topic:$topic content:$content\n";
};
$mqttBack->onClose = function($mqttBack)
{
global $mqtt;
$mqtt->connect();
};
};