如何使用特定类型的 clientId 在 MQTT 中创建客户端?

问题描述

我正在创建一个使用 MQTT 实现的应用程序。为此,我必须使用特定的 clientId 登录到 MQTT 服务器,其中在 clientId 的初始部分包含一个特定的字符串。使用这个 clientId,我无法通过代码登录 MQTT 服务器。

但是使用 MQTT-Explorer 软件,我可以使用相同的凭据登录。如果我从 clientId 更改任何单词或稍后更改,那么我可以通过代码登录

我尝试过各种库,但都没有成功。其背后的原因可能是什么以及如何解决该问题?

我前面遇到了错误

mqtt.event.error connection failure Connection lost (32109) - java.io.EOFException

我使用了“react-native-mqtt-new”库,我的 MQTT createClient 和通信代码如下

import MQTT from 'react-native-mqtt-new';

MQTT.createClient({
            uri: 'mqtt://mqtt.demo.io:1883',//for demo
            clientId: 'specific_string_randomnumber',//for demo
            user: 'xxxxx',pass: 'xxxx',tls: false
        }).then(function (client) {

            client.on('closed',function () {
                console.log('mqtt.event.closed');
            });

            client.on('error',function (msg) {
                console.log(client);
                console.log('mqtt.event.error',msg);
            });

            client.on('message',function (msg) {
                console.log('mqtt.event.message',msg);
            });

            client.on('connect',function () {
                console.log('connected');
                client.subscribe('test/#',0);
                client.publish('test',"demo",false);
            });

            client.connect();
        }).catch(function (err) {
            console.log(err,'err');
        });
   

解决方法

此问题已修复。这个问题的原因是我用于我的要求的库。要求是连接 MQTT 协议 3.1.1 和“react-native-mqtt-new”库,我们连接到 MQTT 协议 3.1.0,这就是我收到错误的原因。

对于解决方案,我已将库更改为“react-native-native-mqtt”,现在它可以正常工作了。