Làm cách nào để kết nối với gRPC C ++ InProcessChannel không phải từ C ++?
Tôi đang thử gRPC làm giải pháp thay thế JNI và ý tưởng là có dịch vụ gRPC ở phía C ++ và ứng dụng khách được kết nối ở phía Java / Android. Để có hiệu suất tốt nhất có thể, tôi muốn sử dụng kênh trong quá trình (mở theo đề xuất của bạn).
Tôi có thể kết nối với máy chủ C ++ gRPC bằng cách InProcessChannel()nào? Vấn đề là tôi cần phải chuyển một namecho Java InProcessServerBuilder.
Trong các bài kiểm tra C ++ gRPC (ví dụ: tại đây ), tôi không thể tìm thấy nó được đặt và nó khiến tôi nghĩ rằng chỉ InProcessChannelcó thể được sử dụng trong C ++ thuần túy (cả máy chủ và máy khách đều bằng C ++). Nó vẫn có thể cho dịch vụ C ++ và máy khách Java?
Tái bút. Tôi đã có thể làm điều đó cho Java-server + Java-client.
PPS. Tôi đã tìm thấy một vài QnA tương tự, ví dụ. ở đây nhưng tôi tự hỏi liệu vẫn có cách nào để làm cho nó hoạt động cùng nhau (có thể là với một số kênh của bên thứ 3). Nó có thể hoạt động trên Unix Domain Sockets không?
Trả lời
Các phương thức vận chuyển "trong quá trình" C ++ và Java không được đặt tên thích hợp cho các trường hợp nhiều ngôn ngữ trong cùng một quá trình. Việc vận chuyển trong quá trình chỉ hoạt động với từng ngôn ngữ riêng lẻ; quá trình vận chuyển trong C ++ và Java không thể tương tác.
Bạn nên sử dụng máy khách / máy chủ HTTP / 2 bình thường.
Mặc dù thứ gì đó như bạn muốn có thể tồn tại, có thể là phương tiện truyền tải "bộ nhớ chia sẻ", nhưng đó là một khối lượng công việc đáng kể và sẽ thấy mức sử dụng tương đối ít cho gánh nặng bảo trì.
Tôi đã chấp nhận câu trả lời của Eric Anderson là đúng. Tuy nhiên, có thể hữu ích nếu biết cách tôi làm cho nó hoạt động với Unix Domain Sockets.
Tôi đã phải vá netty cho Android và sử dụng nó . Hãy chú ý đến một số lưu ý về quyền dành riêng cho Android .