Mqtt代理,关闭旧连接
问题描述:
mqtt客户端具有相同的客户端ID 如何关闭旧连接? 就是这样。Mqtt代理,关闭旧连接
New connection from 192.168.3.57 on port 1883.
1479826181: Client paho166768969170988 already connected, closing old connection.
1479826181: Client paho166768969170988 disconnected.
1479826181: New client connected from 192.168.3.57 as paho166768969170988 (c1, k60, u'admin').
编辑:
String clientId ="**public_cloud**";
try {
MqttClient sampleClient = new MqttClient(config.getBroker(), clientId);
sampleClient.setCallback(new PushCallback());
MqttTopic mtopic = sampleClient.getTopic(config.getTopic());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setConnectionTimeout(100);
connOpts.setKeepAliveInterval(200);
connOpts.setUserName(config.getUsername());
connOpts.setPassword(config.getPassword().toCharArray());
connOpts.setWill(mtopic, "close".getBytes(), 0, true);
sampleClient.connect(connOpts);
} catch (MqttException e) {
e.printStackTrace();
}
}
如果客户端ID是一样的,有错误。
ConnectionLost,原因:(32109) - java.io.EOFException的
答
String clientId ="**public_cloud**";
try {
MqttClient sampleClient = new MqttClient(config.getBroker(), clientId);
sampleClient.setCallback(new PushCallback());
MqttTopic mtopic = sampleClient.getTopic(config.getTopic());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setConnectionTimeout(100);
connOpts.setKeepAliveInterval(200);
connOpts.setUserName(config.getUsername());
connOpts.setPassword(config.getPassword().toCharArray());
connOpts.setWill(mtopic, "close".getBytes(), 0, true);
sampleClient.connect(connOpts);
} catch (MqttException e) {
e.printStackTrace();
}
}
如果clientId
是一样的,它有错误:
ConnectionLost,cause:(32109) - java.io.EOFException
+0
你应该编辑这个问题来添加它,而不是添加它作为答案。这次我为你添加了它。 – hardillb
答
与代理的每个连接都必须有一个独特的客户端ID。这是MQTT规范的一部分。代理如何处理与现有客户端ID的新连接,但大多数会断开最旧的连接。
在您所看到的情况通常的解决办法是使用一个随机生成的客户端ID或当前时间戳
long time = new Date().getTime();
String clientId ="public_cloud" + time;
try {
MqttClient sampleClient = new MqttClient(config.getBroker(), clientId);
sampleClient.setCallback(new PushCallback());
MqttTopic mtopic = sampleClient.getTopic(config.getTopic());
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setConnectionTimeout(100);
connOpts.setKeepAliveInterval(200);
connOpts.setUserName(config.getUsername());
connOpts.setPassword(config.getPassword().toCharArray());
connOpts.setWill(mtopic, "close".getBytes(), 0, true);
sampleClient.connect(connOpts);
} catch (MqttException e) {
e.printStackTrace();
}
}
请解释清楚你问这里。 – hardillb