INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

TCP effizient lesen und parsen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

23.01.2015, 19:02
Beitrag #1

buechling Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Jan 2015

2013
2010
DE



TCP effizient lesen und parsen
Hallo,

ich habe ein Programm, dass Befehle von einem TCP-Port liest und möglichst schnell verarbeiten soll. Ich bekomme JSON-Strings von bis zu 1000 Byte Länge. Ich weiss nicht wieviele Strings hintereinander kommen. Nun mache ich es so: ich lese so lange Byte für Byte bis alle Klammern auf "{" durch eine Klammer zu "}" geschlossen wurden. Dann starte ich die Verarbeitung und kann später erneut dieses VI aufrufen, was eine Zeile ausliest. Jedoch benötigt dieses Verfahren eine Dauer von manchmal bis zu 150ms.. ( meistens ca 5ms - 10ms ) .. das ist zu lang für meine Anwendung..

Ich verwende eine Art Zustandsautomaten, der für jedes { die Schieberegister-Zahl um eins erhöht und für jedes { die Zahl um eins verringert. Ist die Zahl Null oder ist ein TCP-Error aufgetrteten ( der kein Timeout ist ), wird die Schleife beendet und der String ausgegeben.

Kann man das also irgendwie effizienter gestalten? oder kann es daran liegen dass der Server zu langsam sendet? Anbindung ist 100 Mbit.. Also eigentlich schnell genug.. ( 1 KB = 0,08ms )
ich bin schon von Strings auf String-Referenzen umgestiegen und habe dadurch ca 50% Zeit gespart.. Oder wäre es effizienter als Byte-Array? Ich lese Byte für Byte aus der TCP-Referenz, da ich ja ansonsten eventuell zu "weit" lese, und der Anfang vom nächsten String schon aus dem TCP Puffer genommen wurde.. Denkt ihr der ganze String-Kram kostet soviel Zeit oder ist es das ständige Ansprechen der TCP-Referenz?

viele Grüße,
Thomas


Angehängte Datei(en) Thumbnail(s)
   

13.0 .vi  read1Char.vi (Größe: 19,25 KB / Downloads: 208)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.01.2015, 19:28
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: TCP effizient lesen und parsen
Hallo Thomas,

Zitat:Kann man das also irgendwie effizienter gestalten?
Bei den erwarteten Datenraten würde ich auf alle Fälle nicht einzelne Bytes lesen, sondern gleich größere Blöcke. Wenn man das mit einem kleinen Timeout verknüpft, kommt man trotzdem schnell an die Daten.

Zitat:ich bin schon von Strings auf String-Referenzen umgestiegen und habe dadurch ca 50% Zeit gespart.
Das glaube ich kaum. Warum nicht einfach ein Schieberegister, um die Stringdaten zu puffern? Die DVR ist (mMn) Overkill, da hier sowieso mit ständigen Bufferallozierungen (=ConcatString) gearbeitet wird!

Zitat:Denkt ihr der ganze String-Kram kostet soviel Zeit oder ist es das ständige Ansprechen der TCP-Referenz?
Der Zeitkiller dürfte wohl eindeutig der TCP-Kram sein. Einzelbyteabfrage ist nie schnell, egal welche Schnittstelle…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: