Ich habe eine Java-App, die über den TCP-Socket eine Verbindung zu einem in C / C ++ entwickelten "Server" herstellt.
App und Server laufen auf demselben Computer, einer Solaris-Box (wir erwägen jedoch eine eventuelle Migration auf Linux). Die Art der ausgetauschten Daten sind einfache Nachrichten (Login, Login ACK, dann Client fragt nach etwas, Server antwortet). Jede Nachricht ist ungefähr 300 Bytes lang.
Derzeit verwenden wir Sockets und alles ist in Ordnung. Ich suche jedoch nach einer schnelleren Möglichkeit, Daten mithilfe von IPC-Methoden auszutauschen (geringere Latenz).
Ich habe im Internet recherchiert und Hinweise auf folgende Technologien gefunden:
- geteilte Erinnerung
- Rohre
- Warteschlangen
- sowie was als DMA (Direct Memory Access) bezeichnet wird
Aber ich konnte keine richtige Analyse ihrer jeweiligen Leistungen finden und auch nicht, wie man sie sowohl in JAVA als auch in C / C ++ implementiert (damit sie miteinander sprechen können), außer vielleicht Pipes, die ich mir vorstellen könnte.
Kann jemand die Leistung und Machbarkeit jeder Methode in diesem Zusammenhang kommentieren? Gibt es einen Zeiger / Link zu nützlichen Implementierungsinformationen?
EDIT / UPDATE
Nach dem Kommentar und den Antworten, die ich hier erhalten habe, habe ich Informationen zu Unix Domain Sockets gefunden, die scheinbar nur über Pipes erstellt wurden und mir den gesamten TCP-Stack ersparen würden. Es ist plattformspezifisch, daher plane ich, es mit JNI oder entweder Juds oder Junixsocket zu testen .
Die nächsten möglichen Schritte wären die direkte Implementierung von Pipes und dann der gemeinsame Speicher, obwohl ich vor der zusätzlichen Komplexität gewarnt wurde ...
danke für Ihre Hilfe