Hallo,
für eine Robotikanwendung suche ich eine effiziente, binäre Übertragungsweise für Daten zwischen einem Server der in C# geschrieben wurden und einem Client in Java. Im Moment ist die Kommunikation in JSON umgesetzt. Da allerdings nun die Anforderung besteht auch Bilddaten zu übertragen fällt JSON hierbei komplett aus.
Schön wäre es natürlich auf C# Seite WCF benutzen zu können. Auf Java Seite habe ich damit aber leider eigentlich nicht so richtig was gefunden.
Kann mir jemand von euch etwas gutes dazu empfehlen ?
Hallo Lenny,
Da allerdings nun die Anforderung besteht auch Bilddaten zu übertragen fällt JSON hierbei komplett aus.
Komplett fällt sie nicht aus, denn die Bilddaten könnten z.B. als base64 kodierter String im JSON übergeben werden. Da du aber auch von Effizienz geschrieben hast, wäre zu prüfe ob das noch effizient genug ist.
auf C# Seite WCF benutzen zu können
Wenn die "Gegenseite" Java ist, so macht WCF nur bei einer Bindung gem. WSDL sinn. D.h. dann wärst du auf HTTP-Bindung beschränkt und dort wird nach XML serialisiert. Somit ist i.d.R. wohl JSON effizienter.
Solltest du wirklich binär übertragen wollen, so musst du dir für diesen Anwendungsfall (C# <-> Java) ein eigenes Protokoll überlegen wie die Daten binär geschrieben und gelesen werden. Siehe hierzu auch [FAQ] TcpClient: einfaches Beispiel, [Tutorial] Client-/Server-Komponente über TCP-Sockets
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo das Beispiel ist mir bekannt und die Möglichkeit eines eigenen Protokolls auch. Das war jedoch das was ich vermeiden wollte.
Deshalb hatte ich die Hoffnung auf beiden Seiten eventuell schon auf fertige Frameworks bzw. Libraries zurückgreigen zu können.
Protobuf: https://github.com/google/protobuf
Sehr schnelles und einfaches Binärformat, verwenden wir hier für interne Kommunikation überwiegend auch. Gibt Implementierungen für Java und C# und eine Beschreibungssprache mit deren Hilfe Serialisierungsklassen generiert werden können (analog zu XML Schema oder XSD).
ImageTools for Silverlight: http://imagetools.codeplex.com | http://www.silverdiagram.net | http://www.cleancodedeveloper.de b:::
.. die Komprimierungsmöglichkeit (ZipStream) eines textbasierten Protokolles wie JSON sollte ebenfalls noch erwähnt werden.
Hallo,
vielen Dank für die vielen Antworten. Insbesondere das BSON finde ich aufgrund der vielen bereits vorhandenen Implementierungen für andere Sprachen als interessante Alternative und werde mir das genauer anschauen.
Nun ist mir allerdings noch eine weitere Idee gekommen wie man die Übertragung effizienter gestalten kann und würde gerne eure Meinung dazu hören.
Man könnte beim bisherigen JSON bleiben und die großen Datenfelder binär z.B. in base64 codieren. Hierbei stelle ich es mir jedoch schwierig vor dem .Net JSON Serialisierer soetwas beizubringen ohne am Schluss selber großartig am String rumpfuschen zu müssen.
Hallo,
durch die Konvertierung nach base64 steigt die Datengröße etwa um 1/3 an, was nicht Effizienz-förderlich ist.
Im Vergleich dazu die Daten in JSON Dezimal darzustellen sinkt sie aber. Dass ein reines Binärprotokoll effizienter ist, ist klar.