用于创建通道的 gRPC C++ API 返回一个 shared_ptr。生成的函数 NewStub 返回一个 unique_ptr。但是,我已经看到有人在尝试创建存根类型的多个实例、共享频道时遇到问题的报告。他们的解决方案是共享存根。
从文档或 API 中不清楚客户端是要创建多个共享通道的存根实例还是共享单个存根。请阐明存根、通道和唯一客户端连接之间的概念关系。
深入一点:服务器可以提供多个服务,客户端端点可以使用单个通道将相应的存根类型连接到这些服务中的每一个。为此,很明显不同的存根类型共享单个通道以与服务器端点通信。对于给定的服务,gRPC 是否期望每个通道只有一个客户端,或者我可以在客户端端点上有多个客户端与单个服务通信?如果允许,如何在客户端端点上为给定服务实现多个客户端?服务器如何将这些区分为独立的客户端?
顺便说一句,这篇 SO 帖子表明 Channels 和 Stubs 都是线程安全的。(这篇文章是专门针对 Java 的,但我假设它会延续到 C++)。
我需要一个不依赖于特定语言或构建系统的依赖项管理器。我研究了几种出色的工具(Gradle,Bazel,Hunter,Biicode,Conan等),但没有一个能够满足我的要求(请参见下文)。我还使用了Git子模块和Mercurial子仓库。
Daniel Pfeifer在Meeting C ++ 2014上的演示中很好地描述了我的需求。总结此依赖工具的目标(在链接的视频中@ 18:55进行了讨论):
我还要添加其他要求或说明:
很高兴有:
我正在尝试创建一个包含一些 C++ 代码的 Flutter 插件。该代码具有多个依赖项,因此需要采取措施将这些依赖项提供给 C++ 构建系统(当前基于 cmake,为 Windows 桌面构建),特别是在哪里查找头文件和库。使用 CMake 有多种方法可以做到这一点,我们碰巧使用 Conan 来获取和提供依赖项,但无论如何,我需要一种方法来执行预构建步骤和/或为 Flutter 的执行提供参数cmake 来帮助它找到这些依赖项。
我已经确定 Flutter 不支持构建的大量(或任何)可定制性。有 build 和 build_runner 包,但我不相信它们会了解我的平台的构建输出目录,也不提供向 cmake 调用注入参数的方法。
如何将依赖项提供给 Flutter 插件的本机构建?这些依赖项可以是静态库或动态库。