java.io.EOFException mit paho
möchte ich den stress-test auf der mosquitto, so dass ich einige code, wie unten
for (int i = 0; i < 800; i++) {
final int j = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(j + " : ************");
try {
MqttClient client = new MqttClient("tcp://192.168.88.203", SERVER_CLIENTID_PREFIX + j);
client.connect();
MqttMessage message = new MqttMessage((j + ":me").getBytes());
message.setQos(2);
client.publish(TOPIC_PREFIX + j, message);
} catch (MqttSecurityException e) {
e.printStackTrace();
} catch (MqttException e) {
e.printStackTrace();
}
}
});
t.start();
}
Aber, ich habe einige Fehler, wie EOFException
während des Laufs und einige client trennen.
Ich möchte wissen, wie viele clients können Nachrichten veröffentlichen zur gleichen Zeit, mit mosquitto-server, und wie kann ich den stress-test. Danke!
Detail-Ausnahme :
Connection lost (32109) - java.io.EOFException
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:162)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:250)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:51)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:121)
... 1 more
Und ich fand einige log von mosquitto server:
1383736170: Socket read error on client Server-82, disconnecting.
Bitte helfen Sie mir, danke!
Können Sie nach den genauen Ausnahme? Klingt wie der socket geschlossen wurde. Können Sie versuchen, mit einer höheren MQTT keepAlive-Wert? Ich vermute, dass unter dieser hohen Belastung der Paho-client nicht verwalten zum senden von pings richtig.
vielen Dank für deine Antwort, ich habe append detail Ausnahme. Was ist mit der "keepAlive" - Wert, Sie zu erwähnen. ich kann es nicht gefunden in mosquitto.conf , ich fand nur "keepalive_interval" , ist es richtig? nochmals vielen Dank
32109 ist der Fehlercode für "Connection Lost" auf der client-Seite. Das bedeutet, dass der socket geschlossen wurde unerwartet beendet. Wenn Sie wollen, eine höhere keepAlive, Sie haben, um einen MqttConnectOptions-Objekt der Methode connect() mit der angegebenen keepAlive. Wenn das nicht hilft, vermute ich, dass vielleicht erreichen Sie eine Grenze, die auf der server-Seite. Haben Sie versucht, mit anderen Brokern wie HiveMQ oder RabbitMQ?
Danke , das werde ich ändern mein code :client = new MqttClient("tcp://192.168.88.203", "Server-" + j); MqttConnectOptions connOpt = new MqttConnectOptions(); connOpt.setConnectionTimeout(60 * 10); connOpt.setKeepAliveInterval(60 * 5);
aber ,es kann nicht machen Sie ein gutes effection. Ich fand, wenn ich keine Nachricht veröffentlichen, den mosquitto-server akzeptieren könnten, 800 client-Verbindungsauf -, aber wenn ich die Nachricht veröffentlichen, die "32109" Fehler angezeigt. Ich habe keine Ahnung, seufz....
vielen Dank für deine Antwort, ich habe append detail Ausnahme. Was ist mit der "keepAlive" - Wert, Sie zu erwähnen. ich kann es nicht gefunden in mosquitto.conf , ich fand nur "keepalive_interval" , ist es richtig? nochmals vielen Dank
32109 ist der Fehlercode für "Connection Lost" auf der client-Seite. Das bedeutet, dass der socket geschlossen wurde unerwartet beendet. Wenn Sie wollen, eine höhere keepAlive, Sie haben, um einen MqttConnectOptions-Objekt der Methode connect() mit der angegebenen keepAlive. Wenn das nicht hilft, vermute ich, dass vielleicht erreichen Sie eine Grenze, die auf der server-Seite. Haben Sie versucht, mit anderen Brokern wie HiveMQ oder RabbitMQ?
Danke , das werde ich ändern mein code :client = new MqttClient("tcp://192.168.88.203", "Server-" + j); MqttConnectOptions connOpt = new MqttConnectOptions(); connOpt.setConnectionTimeout(60 * 10); connOpt.setKeepAliveInterval(60 * 5);
aber ,es kann nicht machen Sie ein gutes effection. Ich fand, wenn ich keine Nachricht veröffentlichen, den mosquitto-server akzeptieren könnten, 800 client-Verbindungsauf -, aber wenn ich die Nachricht veröffentlichen, die "32109" Fehler angezeigt. Ich habe keine Ahnung, seufz....
InformationsquelleAutor tom | 2013-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich diese genau die gleiche Fehlermeldung mit code, ähnlich wie oben. Ich fand, dass eine änderung der QOS auf 0 das problem behoben.
[Edit] Ein bisschen mehr zu Graben und entdeckte ich, dass der MQTT-plugin für RabbitMQ bietet keine Unterstützung für einen QOS-2. http://www.rabbitmq.com/mqtt.html
InformationsquelleAutor Aidan
Mein Problem ergab sich aus der clientId der gleiche für das publisher/subscriber. Wurde immer Fehler mit Persistence datastore bereits in Verwendung als gut.
InformationsquelleAutor mastash3ff
Gibt es eine 1024 Dateien/sockets Begrenzung in linux, aber Sie stören kann es,
ulimit -n 4096
finden Sie unter:mqtt mosquitto linux Verbindungs-limit
InformationsquelleAutor Teixi
In meinem Fall war dies, da war ich versehentlich mit einem
tcp://...
URL stattssl://...
und der server so konfiguriert wurde, nicht zu erlauben, unsichere verbindungen.Hatte ich auch zu tun, wie @Aidan sagte, und reduzieren Sie die QoS von 2 zu 1.
Bearbeiten: ich bin mir nicht 100% sicher, aber ich denke, dass die server, die ich verwende, ist RabbitMQ, und, weist einen nicht-standard-Bedeutung für die QoS-Werte. Es ist wohl ein vernünftiger Sinn um ehrlich zu sein:
InformationsquelleAutor Timmmm
client-id ist das problem, die Generierung einer zufälligen test
InformationsquelleAutor Gustavo Eduardo Belduma
Manchmal passieren, wenn Sie versuchen, das senden von großen Daten-set. Versuchen Sie zu verringern dataset-Größe. Es problem in meinem Fall.
InformationsquelleAutor Sakib Sami
Die Lösung ist, fügen Sie MqttClient.generateClientId
oder
Der Bezeichner muss zufällig sein.
Ich hatte dieses problem in scala und das war meine Lösung.
InformationsquelleAutor Patricio Vergara