【问题标题】:Why does connection profile in Hyperledger Fabric has gRPC URL?为什么 Hyperledger Fabric 中的连接配置文件有 gRPC URL?
【发布时间】:2020-06-25 05:21:17
【问题描述】:

在客户端应用程序(使用 Node/Go)中,我们提供连接配置文件来识别背书者的端点。

我们用 grpc://localhost:port 来指定 peer 的端点,但实际上 gRPC 是在 HTTP2 上运行的,对吗?

那么 Fabric SDK 是将端点转换为 HTTP url 还是由 Fabric 对等代码处理?

我的意思是如何将 grpc 端点转换为 HTTP 端点?

或者peer是否暴露了一个grpc端点本身?如果是,怎么做?

【问题讨论】:

    标签: hyperledger-fabric grpc hyperledger-fabric-sdk-js hyperledger-fabric-sdk-go hyperldger-fabric-peer


    【解决方案1】:

    对于前端和 Hyperledger Fabric 层之间的通信,我们有两种方式,一种使用 gRPC 调用,或者使用 Hyperledger 社区提供的 SDK 之一。 v1.0 之后没有 REST API 调用,而 v0.6 有 REST API 调用,您可以使用 IP 地址向 Orderer 发起交易,然后是 Consensus。

    将其限制为 gRPC 和 SDK 可以改善设计和连接安全问题,这对于区块链的工作至关重要。 gRPC 是用于通信的 HTTPS 2.0 协议,它比 HTTPS 1.1 速度更快,并且具有改进的安全功能。 SDK 使用 gRPC 调用与网络通信。所以,说白了,如果你需要和网络通信,你只需要使用 gRPC 调用就可以了

    【讨论】:

    • 明白!那么如果我没记错的话,这是否意味着 SDK 读取了连接配置文件、对等方的 gRPC URL,并将其转换为 HTTP URL(作为对对等方的 gRPC 调用)?
    • grpc 默认是http 2,不会转成https之前的1.1版本。因此没有转化
    • 对不起!我知道的!我的意思是说连接配置文件的对等地址是这样的:grpcs://localhost:7051 但如果我没记错的话,没有像“grpcs”这样的东西对吗?因此 SDK 必须解析 URL 并对对等方进行 HTTP2 调用,例如:“localhost:7051”.. 如果我错了,请纠正我!
    • sdk 不会将其转换为 http2,而是从 url 中提取主机和端口,检查是否使用 ssl grpcs vs grpc 然后使用节点 grpc apis 建立适当的连接(将在幕后使用 http2)。所以从技术上讲,grpc 协议名称对于客户端 sdk 应用程序的连接配置文件来说是特殊的
    • 完美就是我所期望的!谢谢!
    【解决方案2】:

    正如上面 cmets 中的@david_k 所建议的,连接配置文件中的 URL 用于在识别是 grpc 还是 grpcs 后提取主机和端口号(超过SSL) 调用。

    验证:

    1. 部署fabcar 示例并安装节点模块。
    2. 转到lib 目录内fabric-common 节点模块中的Endpoint.js 文件。编辑与第 44 行 here 对应的行。
    3. 转到first-network 目录(fabcar 示例使用的网络)编辑连接配置文件。替换与您在节点模块中对 Endpoint.js 文件所做的编辑相对应的 peer 和 orderer URL 中的 grpcs
    4. 返回javascript 目录并获取钱包身份。
    5. 修改invoke.js 以读取新的连接配置文件。
    6. 执行一下,可以看到事务提交成功了。

    因此,我们可以确定只有主机和端口是从 URL 中获取的,用于对结构网络进行 grpc/grpcs 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 2022-12-15
      • 2020-08-30
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多