用workerman的mqtt做为客户端,mqtt服务端是集群,连接任何一台都可以接收数据,我的问题是,如何onClose或者onError的时候冲连另一台服务器。 即做到只要一台出问题,自动重连服务器队列里的任何一台。
onClose 或者 onError 的时候,关闭当前mqtt连接,然后重新建立一个mqtt实例,去连新的ip。
谢谢!
评论里贴代码不方便,后面贴了,我们尝试了一下,目前来看还行,需要到生产环境里测试了。
新的ip需要 new 新的Client,要不然地址传不进来,而这时候就报 类重复加载错误。因为常驻内存的问题。
搞不懂你为啥要重复加载
$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); };
是这样写吗?
下面这段代码能实现上面的功能,测试过了,就不知道还有什么坑。
$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(); };
};
onClose 或者 onError 的时候,关闭当前mqtt连接,然后重新建立一个mqtt实例,去连新的ip。
谢谢!
评论里贴代码不方便,后面贴了,我们尝试了一下,目前来看还行,需要到生产环境里测试了。
新的ip需要 new 新的Client,要不然地址传不进来,而这时候就报 类重复加载错误。因为常驻内存的问题。
搞不懂你为啥要重复加载
是这样写吗?
下面这段代码能实现上面的功能,测试过了,就不知道还有什么坑。
$worker->onWorkerStart = function(){
global $mqtt,$mqttBack;
};