用workerman的mqtt做为客户端,如何onClose或者onError的时候连另一台服务器

youwuku

用workerman的mqtt做为客户端,mqtt服务端是集群,连接任何一台都可以接收数据,我的问题是,如何onClose或者onError的时候冲连另一台服务器。
即做到只要一台出问题,自动重连服务器队列里的任何一台。

1890 3 0
3个回答

six

onClose 或者 onError 的时候,关闭当前mqtt连接,然后重新建立一个mqtt实例,去连新的ip。

  • youwuku 2020-07-06

    谢谢!

  • youwuku 2020-07-07

    评论里贴代码不方便,后面贴了,我们尝试了一下,目前来看还行,需要到生产环境里测试了。

youwuku

新的ip需要 new 新的Client,要不然地址传不进来,而这时候就报 类重复加载错误。因为常驻内存的问题。

  • six 2020-07-06

    搞不懂你为啥要重复加载

  • youwuku 2020-07-06
    $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);
    };
  • youwuku 2020-07-06

    是这样写吗?

youwuku

下面这段代码能实现上面的功能,测试过了,就不知道还有什么坑。

$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();
};

};

  • 暂无评论
年代过于久远,无法发表回答
🔝