Jak połączyć się z gRPC C ++ InProcessChannel, a nie z C ++?
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 name
dla Javy InProcessServerBuilder
.
W testach gRPC w C ++ (np. Tutaj ) nie mogę znaleźć tego ustawienia i wydaje mi się, że InProcessChannel
moż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
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.
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 .