在gRPC中,为什么客户端还实现服务器/服务方法?

时间:2019-09-25 16:35:26

标签: grpc

gRPC's guide指出以下内容:

  

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

为什么客户端必须实现这些方法?他们为什么要这么做?在我看来,在大多数情况下,客户端调用服务是因为它本身无法完成特定任务。因此,如果它本身实现了方法,那么调用服务的意义何在?

我仍在学习有关gRPC的过程,所以我的理解仍然很有限。但是,关于它为何如此起作用,我还没有清楚的解释。

1 个答案:

答案 0 :(得分:1)

gRPC位于传输(OSI)层的顶部,并管理与用于HTTP连接的TCP套接字有关的所有事情。

除其他外,它可以处理:

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

如果客户端要发送消息,则需要创建一条消息,对其进行序列化(可能使用协议缓冲区),然后移交给gRPC(如图所示调用gRPC客户端API或stub)套接字send()。如果客户端已使用gRPC注册了响应回调,那么它将从服务器收到有关响应的通知。

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

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

如果要在gRPC源代码中查看套接字级代码:
服务器-github
客户端-github