将 gRPC 通道从 C++ 转换为 Java

Convert gRPC channel from C++ to Java

我有一个库,它已经使用了 C++ version of gRPC,我需要实现一个 Java 包装器。 因此,我需要使用 Java 本机接口 (JNI) 将 std::shared_ptr<grpc::Channel> 转换为 gRPC-Java Channel.

更具体地说,我需要实现以下 Java 功能:

public native ManagedChannel CreateChannel(String address);

引用这个现有的 C++ 函数:

std::shared_ptr<grpc::Channel> CreateChannel(std::string address);

可以这样做吗?

很可能不会。 Java 实现并未专门设计为与 C++ 实现互操作,因此它有自己的纯 Java ManagedChannel 实现。

可能吗?是的。简单?编号

Channel/ManagedChannelAPI主要有newCall()方法。实现该方法会很烦人,因为您需要将 MethodDescriptorCallOptions 映射到 C++ 等价物。但更大的问题是它 returns 一个 ClientCall 这将需要更多的工作来实现。

C++ 使用与 Java 不同的 API 进行流量控制,因此您必须映射它们。 C++ 回调 API 在这种情况下是理想的,但目前不可用(写作时间:2019 年第四季度)。所以这意味着创建线程并使用异步 API.