Zeitgleiche XmlRPC Anfragen führen zu Fehlermeldung

Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI

Moderator: Co-Administratoren

Antworten
coolsurfer
Beiträge: 58
Registriert: 24.01.2016, 12:02

Zeitgleiche XmlRPC Anfragen führen zu Fehlermeldung

Beitrag von coolsurfer » 25.01.2017, 07:00

Hallo,

ich hab ein letzter Zeit immer wieder Fehlermeldungen im CCU2 LOG:

Code: Alles auswählen

<11>1 2017-01-25T05:44:29+01:00 192.168.111.40 rfd - - - rfd: XmlRpcClient error calling event({[methodName:"event",params:{"HMMultiApp:2001","LEQxxxxxxx:2","BOOT",true}],[methodName:"event",params:{"HMMultiApp:2001","LEQxxxxxxx:2","ENERGY_COUNTER",2092.100000}],[methodName:"event",params:{"
<11>1 2017-01-25T05:44:29+01:00 192.168.111.40 rfd - - - rfd: XmlRpc transport error
Der Fehler tritt immer dann auf, wenn die CCU versucht ZEITGLEICH zwei Anfragen abzusetzen (hier das Log meiner Applikation):

Code: Alles auswählen

1311  25.01.2017 05:44:29 - <?xml version="1.0"?>
<methodCall><methodName>system.multicall</methodName>
<params><param><value><array><data><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>BOOT</value><value><boolean>1</boolean></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>ENERGY_COUNTER</value><value><double>2092.100000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>POWER</value><value><double>29.080000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>CURRENT</value><value><double>203.000000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>VOLTAGE</value><value><double>233.300000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>FREQUENCY</value><value><double>49.980000</double></value></data></array></value></member></struct></value></data></array></value></param></params></methodCall>



1140  25.01.2017 05:44:29 - <?xml version="1.0"?>
<methodCall><methodName>system.multicall</methodName>
<params><param><value><array><data><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>JEQxxxxxxx:1</value><value>TEMPERATURE</value><value><double>22.100000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>JEQxxxxxxx:1</value><value>HUMIDITY</value><value><i4>33</i4></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>BOOT</value><value><boolean>1</boolean></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>ENERGY_COUNTER</value><value><double>24.700000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>POWER</value><value><double>0.000000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>CURRENT</value><value><double>0.000000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>VOLTAGE</value><value><double>234.800000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>FREQUENCY</value><value><double>49.980000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>BOOT</value><value><boolean>1</boolean></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>ENERGY_COUNTER</value><value><double>12826.500000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>POWER</value><value><double>0.000000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>CURRENT</value><value><double>0.000000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>VOLTAGE</value><value><double>233.200000</double></value></data></array></value></member></struct></value><value><struct><member><name>methodName</name><value>event</value></member><member><name>params</name><value><array><data><value>HMMultiApp:2001</value><value>LEQxxxxxxx:2</value><value>FREQUENCY</value><value><double>49.980000</double></value></data></array></value></member></struct></value></data></array></value></param></params></methodCall>
Mein Programm beantwortet auch beide Anfragen korrekt, nur die Antwort auf die ERSTE gesendete wird von der CCU wohl nicht mehr erwartet oder ausgewertet und damit wird für die zeitlich zuerst abgesendete ein Fehler erzeugt. Die Werte habe ich bekommen und verarbeitet, das ist nicht das Problem. Problem ist aber, wenn dies zufällig 3-4 mal direkt hintereinander passiert (was alle 2-3 Monate vorkommt), dann steigt der RPC aus und sendet gar nichts mehr, bis er neu initalisiert ist.

Hat jemand eine Idee was ich ändern könnte, oder was hier falsch läuft ?

EDIT:
Ich habe jetzt extra einen SLEEP-TIMER von 5 Sekunden eingebaut, um zu sehen, ob ich das Verhalten reproduzieren kann. Aber selbst wenn ich 5 Sekunden mit der Antwort warte kommen in der Zeit 3-6 RPC Calls, die alle beantwortet werden und deren Antwort auch von der CCU erwartet und akzeptiert werden (ohne eine Fehlermeldung). Nur wenn die CCU2 selbst innerhalb von 1/2 Sekunde zwei Anfragen losschickt verschluckt sie sich anscheinend.

coolsurfer

Beneli
Beiträge: 3
Registriert: 02.11.2016, 14:10

Re: Zeitgleiche XmlRPC Anfragen führen zu Fehlermeldung

Beitrag von Beneli » 31.01.2017, 12:45

Ich hatte auch so einige Probleme mit der CCU2.

Auf der einen Seite erzeugen Callbacks von der CCU in meiner Application ReadTimeout-Exceptions,
und Anfragen meines XmlRpcClients dauerten ewig bis meine Send() Methode eine Response bekam.

Nach vielem Testen obs an meinem Programm, dem Netzwerk oder was auch immer lag, habe ich für
mich eine ziemlich simple lösung nur durch zufall gefunden. Mir sind in einem Wireshark-Dump einige
merkwürdige verzögerungen der TCP-Pakete aufgefallen, und darauf hin wollte ich die Sicht der CCU2
aufzeichnen, um den Fehler genauer lokalisieren zu können. Soweit ich aber tcpdump auf der CCU2
startete, war alles wieder in Ordnung und die Antwortzeiten der CCU waren auf einmal blitzschnell.

Die Lösung für mich:

Code: Alles auswählen

Einfach per SSH einloggen und dies Ausführen: 
tcpdump -i eth0 > /dev/null &
Danach einfach per "exit" ausloggen, und fertig.

Die zusätzliche belastung liegt bei vielen Anfragen bei bis zu 8-13% auf meiner CCU2.
Dafür läuft sie aber nun völlig zuverlässing ohne Probleme mit dem XmlRpc-Server/Client. :D

Ist vielleicht auch für dich ein Versuch wert. :)

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“