Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android uncaughtException:缺少数据包mqtt nodejs_Android_Node.js_Mqtt_Mosquitto - Fatal编程技术网

Android uncaughtException:缺少数据包mqtt nodejs

Android uncaughtException:缺少数据包mqtt nodejs,android,node.js,mqtt,mosquitto,Android,Node.js,Mqtt,Mosquitto,我正在其中一个应用程序中使用安装在ubuntu机器上的节点模块mqtt和MOSQUITO。有一段时间我在服务器上出错,即丢失了数据包。当我搜索它时,我发现这个错误发生在没有找到客户端id或者我们试图连接已经连接的客户端时 我们在客户端使用android,并且 设置QOS级别:2 结论:错误 我们在服务器端所做的是,我们有一些用户是彼此的朋友,因此我们为每个用户创建客户端对象,因为他们是我们的逻辑中的朋友。通过那里的客户端id,然后连接他们,然后订阅他们,然后断开客户端。所以当用户第一次没有从客户

我正在其中一个应用程序中使用安装在ubuntu机器上的节点模块mqtt和MOSQUITO。有一段时间我在服务器上出错,即丢失了数据包。当我搜索它时,我发现这个错误发生在没有找到客户端id或者我们试图连接已经连接的客户端时

我们在客户端使用android,并且

设置QOS级别:2

结论:错误

我们在服务器端所做的是,我们有一些用户是彼此的朋友,因此我们为每个用户创建客户端对象,因为他们是我们的逻辑中的朋友。通过那里的客户端id,然后连接他们,然后订阅他们,然后断开客户端。所以当用户第一次没有从客户端建立连接时,我们收到了消息,因为我们已经在服务器端一次订阅了通道。那个运行得很好,我们收到了消息,因为客户端在第一时间并没有连接。 还有一个条件是,当客户端刷新列表时,我们会重复上面定义的服务器端代码

做客户

连接它们

然后订阅这个频道

而不是断开连接

订阅连接和断开客户端的代码为:-

  var client = mqtt.connect(configurationHolder.config.mqttUrl, {
        clientId: from_user.toString(),
        clean: false
    });
        
    client.on('connect', function () {
        console.log("into connect function.....");
        //Logger.log("into client client ******", subscribe_topic);
        var chanelobj = {};
        chanelobj[subscribe_topic] = 2;
        client.subscribe(chanelobj, function (err, granted) {
            if (err)
                Logger.log("error while subscribing..", err);
            else if (granted)
                console.log("granted...", granted);
            client.end();
        });
    //    Logger.info("chanel subscribe  ", subscribe_topic);
    });
但有时我们会在服务器端得到丢失的数据包异常,即

"stack": [
    "Error: missing packet",
    "    at Store.get (/home/ubuntu/node_modules/mqtt/lib/store.js:92:8)",
    "    at MqttClient._handlePubrel (/home/ubuntu/node_modules/mqtt/lib/client.js:858:22)",
    "    at MqttClient._handlePacket (/home/ubuntu/node_modules/mqtt/lib/client.js:279:12)",
    "    at process (/home/ubuntu/node_modules/mqtt/lib/client.js:226:12)",
    "    at MqttClient._handlePacket (/home/ubuntu/node_modules/mqtt/lib/client.js:283:7)",
    "    at process (/home/ubuntu/node_modules/mqtt/lib/client.js:226:12)",
    "    at Writable.writable._write (/home/ubuntu/node_modules/mqtt/lib/client.js:236:5)",
    "    at doWrite (/home/ubuntu/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:237:10)",
    "    at writeOrBuffer (/home/ubuntu/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:227:5)",
    "    at Writable.write (/home/ubuntu/node_modules/mqtt/node_modules/readable-stream/lib/_stream_writable.js:194:11)",
    "    at write (_stream_readable.js:583:24)",
    "    at flow (_stream_readable.js:592:7)",
    "    at Socket.pipeOnReadable (_stream_readable.js:624:5)",
    "    at Socket.EventEmitter.emit (events.js:92:17)",
    "    at emitReadable_ (_stream_readable.js:408:10)",
    "    at emitReadable (_stream_readable.js:404:5)",
    "    at readableAddChunk (_stream_readable.js:165:9)",
    "    at Socket.Readable.push (_stream_readable.js:127:10)",
    "    at TCP.onread (net.js:526:21)"
  ],
  "level": "error",
  "message": "uncaughtException: missing packet"
}
以及在客户端获取错误,即:-

订阅失败连接丢失(32109)-java.io.EOFException

我无法找到客户端或服务器端的实际问题。在服务器端,断开客户端或客户端的连接存在问题。请帮我摆脱这种局面。也让我知道如何调试这个问题

谢谢你的帮助


谢谢你,我也面临同样的问题。请帮助我了解所有客户端必须具有唯一的客户端ID。您是否从同一台设备进行多个客户端连接?@hardillb感谢您的回复,我们正在为一个具有唯一ID的客户端进行单次连接,如上所述。我们首先在服务器端建立连接,并在向移动端提供服务之前关闭连接,即我们第一次从服务器端进行订阅,在移动端之后,我们仅通过唯一的idYa连接客户端一次,我也面临同样的问题。请帮助我了解所有客户端必须具有唯一的客户端ID。您是否从同一台设备进行多个客户端连接?@hardillb感谢您的回复,我们正在为一个具有唯一ID的客户端进行单次连接,如上所述。我们首先在服务器端建立连接,并在发送到移动端之前关闭连接,即我们第一次从服务器端进行订阅,在移动端之后,我们仅通过唯一id连接客户端一次