Como se conectar a gRPC C ++ InProcessChannel não a partir de C ++?

Dec 21 2020

Estou tentando o gRPC como alternativa JNI e a ideia é ter o serviço gRPC no lado C ++ e o cliente conectado no lado Java / Android. Para ter o melhor desempenho possível, prefiro usar o canal em processo (aberto às suas sugestões).

Como posso me conectar ao servidor gRPC C ++ com InProcessChannel()? O problema é que preciso passar um namepara Java InProcessServerBuilder.

Em testes C ++ gRPC (por exemplo, aqui ), não consigo encontrar sua configuração e isso me faz pensar que InProcessChannelpode ser usado apenas em C ++ puro (tanto o servidor quanto o cliente estão em C ++). Ainda é possível para o serviço C ++ e o cliente Java?

PS. Consegui fazer isso para servidor Java + cliente Java.

PPS. Eu encontrei alguns QnAs semelhantes, por exemplo. aqui, mas eu me pergunto se ainda há uma maneira de fazê-lo funcionar em conjunto (provavelmente com algum impl de canal de terceiros). Ele pode funcionar em soquetes de domínio Unix?

Respostas

3 EricAnderson Dec 22 2020 at 06:14

Os transportes C ++ e Java "em processo" não foram nomeados apropriadamente para casos em que várias linguagens estão no mesmo processo. Os transportes em processo funcionam apenas em cada idioma individual; os transportes em processo C ++ e Java não podem interagir.

Você deve usar o cliente / servidor HTTP / 2 normal.

Embora algo como você queira possa existir, como talvez um transporte de "memória compartilhada", é uma quantidade significativa de trabalho e veria relativamente pouco uso para a carga de manutenção.

1 4ntoine Dec 22 2020 at 20:24

Aceitei a resposta de Eric sobre Anderson como correta. No entanto, pode ser útil saber como eu fiz isso trabalhando com Unix Domain Sockets.

Tive que fazer um patch netty para o Android e usá-lo . Preste atenção a algumas notas de permissão específicas do Android .