Как подключиться к gRPC C ++ InProcessChannel не с C ++?
Я пытаюсь использовать gRPC в качестве альтернативы JNI, и идея состоит в том, чтобы иметь службу gRPC на стороне C ++ и клиент, подключенный на стороне Java / Android. Чтобы добиться максимальной производительности, я бы предпочел использовать внутрипроцессный канал (открыт для ваших предложений).
Как я могу подключиться к серверу C ++ gRPC с помощью InProcessChannel()? Проблема заключается в том, что мне нужно пройтиname
для в Java InProcessServerBuilder
.
В тестах C ++ gRPC (например, здесь ) я не могу найти его, и это заставляет меня думать, что InProcessChannel
его можно использовать только в чистом C ++ (и сервер, и клиент находятся на C ++). Возможно ли это для службы C ++ и клиента Java?
PS. У меня получилось сделать это для Java-сервера + Java-клиента.
PPS. Я нашел пару похожих QnA, например. здесь, но мне интересно, есть ли еще способ заставить его работать вместе (возможно, с каким-то сторонним каналом). Может ли он работать через сокеты домена Unix?
Ответы
«Внутрипроцессные» транспорты C ++ и Java не были названы должным образом для случаев, когда несколько языков находятся в одном процессе. Внутрипроцессные транспорты работают только на каждом отдельном языке; внутрипроцессные транспорты C ++ и Java не могут взаимодействовать.
Вы должны использовать обычный клиент / сервер HTTP / 2.
Хотя может существовать что-то вроде того, что вы хотите, например, транспорт с «разделяемой памятью», это значительный объем работы и относительно небольшое использование для бремени обслуживания.
Я принял ответ Эрика Андерсона как правильный. Однако было бы полезно узнать, как я заставил его работать с сокетами домена Unix.
Пришлось патчить netty
для Android и использовать . Обратите внимание на некоторые примечания к разрешениям для Android .