小编Ken*_*Ken的帖子

我应该共享 gRPC 存根还是通道?

用于创建通道的 gRPC C++ API 返回一个 shared_ptr。生成的函数 NewStub 返回一个 unique_ptr。但是,我已经看到有人在尝试创建存根类型的多个实例、共享频道时遇到问题的报告。他们的解决方案是共享存根。

从文档或 API 中不清楚客户端是要创建多个共享通道的存根实例还是共享单个存根。请阐明存根、通道和唯一客户端连接之间的概念关系。

深入一点:服务器可以提供多个服务,客户端端点可以使用单个通道将相应的存根类型连接到这些服务中的每一个。为此,很明显不同的存根类型共享单个通道以与服务器端点通信。对于给定的服务,gRPC 是否期望每个通道只有一个客户端,或者我可以在客户端端点上有多个客户端与单个服务通信?如果允许,如何在客户端端点上为给定服务实现多个客户端?服务器如何将这些区分为独立的客户端?

顺便说一句,这篇 SO 帖子表明 Channels 和 Stubs 都是线程安全的。(这篇文章是专门针对 Java 的,但我假设它会延续到 C++)。

c++ client channel stub grpc

11
推荐指数
1
解决办法
6684
查看次数

语言/平台/与构建无关的依赖性管理器

我需要一个不依赖于特定语言或构建系统的依赖项管理器。我研究了几种出色的工具(Gradle,Bazel,Hunter,Biicode,Conan等),但没有一个能够满足我的要求(请参见下文)。我还使用了Git子模块和Mercurial子仓库。

Daniel Pfeifer在Meeting C ++ 2014上的演示中很好地描述了我的需求。总结此依赖工具的目标(在链接的视频中@ 18:55进行了讨论):

  • 不只是包裹管理者
  • 支持预建或源依赖
  • 可以在本地下载或查找-无需下载
  • 使用多种方法(例如下载或VCS克隆等)进行提取
  • 与系统安装程序集成-可以检查是否安装了lib
  • 无需以任何方式修改源代码
  • 无需调整构建系统
  • 跨平台

我还要添加其他要求或说明:

  • 适用于第三方和/或版本化的依赖项,但也可以指定非版本化和/或共同开发的依赖项(可能由git / mercurial哈希或标记指定)。
  • 提供一种机制来覆盖指定的获取行为,以使用我选择的某些替代依赖项版本。
  • 无需手动设置依赖项存储。我不反对使用中央依赖性位置来避免冗余或循环依赖性。但是,我们需要克隆仓库和执行一些顶层构建脚本的简单性,这些脚本调用依赖管理器并构建所有内容。
  • 尽管要求我不必修改构建系统,但显然某些顶级构建必须使用依赖项管理器,然后将这些依赖项提供给各个构建。该要求意味着个人构建不应了解依赖项管理器。例如,如果将CMake用于C ++程序包,则无需修改其CMakeLists.txt以使其特殊。定位依赖项的功能调用。而是,顶级构建管理器应调用依赖性管理器以检索依赖性,然后提供CMake可以传统方式使用的参数(即find_package或add_subdirectory)。换句话说,我应该始终可以选择手动执行顶级构建和依赖项管理器的工作,并且各个构建都不应该知道它们之间的区别。

很高兴有:

  • 事后询问依赖关系管理器以查找放置依赖关系的方式。这将允许我创建VCS挂钩,以自动更新共同开发的源回购依赖项的依赖项元数据中的哈希。(就像子模块或子仓库一样)。

build dependency-management gradle bazel conan

5
推荐指数
1
解决办法
619
查看次数

如何处理 Flutter 插件中的原生依赖关系

我正在尝试创建一个包含一些 C++ 代码的 Flutter 插件。该代码具有多个依赖项,因此需要采取措施将这些依赖项提供给 C++ 构建系统(当前基于 cmake,为 Windows 桌面构建),特别是在哪里查找头文件和库。使用 CMake 有多种方法可以做到这一点,我们碰巧使用 Conan 来获取和提供依赖项,但无论如何,我需要一种方法来执行预构建步骤和/或为 Flutter 的执行提供参数cmake 来帮助它找到这些依赖项。

我已经确定 Flutter 不支持构建的大量(或任何)可定制性。有 build 和 build_runner 包,但我不相信它们会了解我的平台的构建输出目录,也不提供向 cmake 调用注入参数的方法。

如何将依赖项提供给 Flutter 插件的本机构建?这些依赖项可以是静态库或动态库。

c++ cmake flutter flutter-windows

5
推荐指数
1
解决办法
314
查看次数