Wie kann ich eine Verbindung zu gRPC C ++ InProcessChannel herstellen, nicht über C ++?

Dec 21 2020

Ich versuche gRPC als JNI-Alternative und die Idee ist, einen gRPC-Dienst auf C ++ - Seite und einen Client auf Java / Android-Seite zu haben. Um die bestmögliche Leistung zu erzielen, würde ich lieber den In-Process-Kanal verwenden (offen für Ihre Vorschläge).

Wie kann ich eine Verbindung zum C ++ gRPC-Server herstellen InProcessChannel()? Das Problem ist , dass ich brauchen passieren eine namefür Java InProcessServerBuilder.

In C ++ gRPC-Tests (z. B. hier ) kann ich nicht feststellen, dass es festgelegt ist, und ich denke, InProcessChanneldass es nur in reinem C ++ verwendet werden kann (sowohl Server als auch Client sind in C ++). Ist es für C ++ - Dienst und Java-Client noch möglich?

PS. Ich konnte es für Java-Server + Java-Client tun.

PPS. Ich habe ein paar ähnliche QnAs gefunden, z. hier, aber ich frage mich, ob es noch eine Möglichkeit gibt, es zusammenzubringen (wahrscheinlich mit einem Drittanbieter-Kanalimplement). Kann es über Unix Domain Sockets funktionieren?

Antworten

3 EricAnderson Dec 22 2020 at 06:14

Die "In-Process" -Transporte von C ++ und Java wurden für Fälle, in denen sich mehrere Sprachen im selben Prozess befinden, nicht entsprechend benannt. Die In-Process-Transporte funktionieren nur in jeder einzelnen Sprache. Die C ++ - und Java-In-Process-Transporte können nicht interagieren.

Sie sollten den normalen HTTP / 2-Client / Server verwenden.

Während so etwas wie das, was Sie wollen, existieren könnte, wie vielleicht ein "Shared Memory" -Transport, ist es eine erhebliche Menge an Arbeit und würde relativ wenig Verwendung für die Wartungslast sehen.

1 4ntoine Dec 22 2020 at 20:24

Ich habe Erics Anderson-Antwort als richtig akzeptiert. Allerdings könnte es nützlich sein zu wissen , wie ich es gemacht Arbeiten mit Unix Domain Sockets.

Ich musste für Android patchen netty und es verwenden . Zahlen Sie Ihre Aufmerksamkeit auf einige Android-spezifische Erlaubnis Notizen .