【问题标题】:In gRPC, why does the client also implement server/service methods?在 gRPC 中,为什么客户端还要实现 server/service 方法?
【发布时间】:2019-09-25 16:35:26
【问题描述】:

gRPC's guide 声明如下:

在客户端,客户端有一个称为存根的本地对象(对于某些语言,首选术语是客户端)实现与服务相同的方法

为什么客户端必须实现这些方法?他们为什么要这样做?在我看来,在大多数情况下,客户端调用服务是因为它本身缺乏完成某项任务的能力。所以,如果它自己实现了方法,那调用服务有什么意义呢?

我还在学习gRPC的过程中,所以我的理解还很有限。但是,我还没有清楚地解释为什么它会以这种方式运行。

【问题讨论】:

  • 它不是服务器实现,而是实现处理与服务器通信的服务“接口”的客户端对象。

标签: grpc


【解决方案1】:

gRPC 位于传输 (OSI) 层之上,管理与 HTTP 连接的 TCP 套接字相关的所有事情。

除其他外,它处理:

  • 连接建立(创建 TCP 套接字)、连接破坏、重新连接:
    • 对于服务器,使其listen 在一个端口上和accept 客户端连接,
    • 对于客户端,它在服务器上调用connect ip/端口。
  • send/recv - 从/向套接字读取/写入消息、消息流等。

如果客户端想要发送消息,它需要创建一个消息,序列化它(可能使用协议缓冲区),然后交给 gRPC(调用 gRPC 客户端 API 或stub,如图所示)用于套接字@ 987654332@。如果客户端已经向 gRPC 注册了响应回调,那么它将收到服务器响应的通知。

因此,实际上,服务器所做的工作,客户端只是调用客户端 API,以便 gRPC 可以向 gRPC 服务器发送请求。

来自https://grpc.io/docs/guides/ 的下图显示了客户端和服务器中的 gRPC 存根 -

如果您想查看 gRPC 源代码中的套接字级别代码:
服务器 - github
客户 - github

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多