Jak połączyć się z gRPC C ++ InProcessChannel, a nie z C ++?

Dec 21 2020

Ja próbuje gRPC jak JNI alternatywy i chodzi o to, aby mieć dostęp do usług gRPC na C ++ stronie i po stronie klienta podłączonego Java / Android. Aby uzyskać najlepszą możliwą wydajność, wolałbym używać kanału w trakcie procesu (otwartego na Twoje sugestie).

Jak mogę połączyć się z serwerem C ++ gRPC za pomocą InProcessChannel()? Problem w tym, że muszę zdać A namedla Javy InProcessServerBuilder.

W testach gRPC w C ++ (np. Tutaj ) nie mogę znaleźć tego ustawienia i wydaje mi się, że InProcessChannelmożna go używać tylko w czystym C ++ (zarówno serwer, jak i klient są w C ++). Czy jest to nadal możliwe dla usługi C ++ i klienta Java?

PS. Udało mi się to zrobić dla serwera Java + klienta Java.

PPS. Znalazłem kilka podobnych pytań, np. tutaj, ale zastanawiam się, czy nadal istnieje sposób, aby to działało razem (prawdopodobnie z jakimś implem kanału innej firmy). Czy może działać na gniazdach domeny Unix?

Odpowiedzi

3 EricAnderson Dec 22 2020 at 06:14

Transporty „w procesie” C ++ i Java nie zostały odpowiednio nazwane w przypadkach, gdy wiele języków jest w tym samym procesie. Transporty w procesie działają tylko w każdym języku; transporty w procesie C ++ i Java nie mogą ze sobą współdziałać.

Powinieneś użyć normalnego klienta / serwera HTTP / 2.

Chociaż może istnieć coś takiego, jak chcesz, może to być transport „pamięci współdzielonej”, jest to znacząca ilość pracy i wymagałoby stosunkowo niewielkiego obciążenia związanego z utrzymaniem.

1 4ntoine Dec 22 2020 at 20:24

Przyjąłem odpowiedź Erica Andersona jako poprawną. Jednak warto wiedzieć, jak to działa z gniazdami domeny Unix.

Musiałem załatać netty Androida i go używać . Zwróć uwagę na niektóre uwagi dotyczące uprawnień dotyczące Androida .