Comment se connecter à gRPC C ++ InProcessChannel pas à partir de C ++?
J'essaie GRPC comme une alternative JNI et l'idée est d'avoir un service GRPC sur C ++ côté et client connecté sur le côté Java / Android. Afin d'avoir les meilleures performances possibles, je préférerais utiliser le canal en cours (ouvert à vos suggestions).
Comment puis-je me connecter au serveur C ++ gRPC avec InProcessChannel()? Le problème est que je dois passer un name
pour Java InProcessServerBuilder
.
Dans les tests C ++ gRPC (par exemple ici ), je ne trouve pas qu'il est défini et cela me fait penser qu'il InProcessChannel
peut être utilisé uniquement en C ++ pur (le serveur et le client sont en C ++). Est-ce toujours possible pour le service C ++ et le client Java?
PS. J'ai pu le faire pour le serveur Java + le client Java.
PPS. J'ai trouvé quelques QnAs similaires, par exemple. ici, mais je me demande s'il existe encore un moyen de le faire fonctionner ensemble (probablement avec un implément de canal tiers). Peut-il fonctionner sur les sockets de domaine Unix?
Réponses
Les transports "en cours" C ++ et Java n'ont pas été nommés de manière appropriée pour les cas où plusieurs langages sont dans le même processus. Les transports en cours ne fonctionnent que dans chaque langue individuelle; les transports en cours C ++ et Java ne peuvent pas interagir.
Vous devez utiliser le client / serveur HTTP / 2 normal.
Bien que quelque chose comme vous le souhaitez puisse exister, comme peut-être un transport de «mémoire partagée», c'est une quantité de travail importante et serait relativement peu utilisée pour le fardeau de la maintenance.
J'ai accepté la réponse d'Anderson d'Eric comme correcte. Cependant, il peut être utile de savoir comment je l'ai fait fonctionner avec les sockets de domaine Unix.
J'ai dû patcher netty
pour Android et l' utiliser . Faites attention à certaines notes d' autorisation spécifiques à Android .