【问题标题】:Convert gRPC channel from C++ to Java将 gRPC 通道从 C++ 转换为 Java
【发布时间】:2020-04-02 00:04:28
【问题描述】:

我有一个库,它已经使用了C++ version of gRPC,我需要实现一个 Java 包装器。 因此,我需要使用 Java Native Interface (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-native-interface grpc grpc-java


    【解决方案1】:

    可能吗?是的。简单?没有。

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2013-05-02
      • 2013-08-20
      • 2023-03-14
      相关资源
      最近更新 更多