TCP套接字客户端和protobuf可以与gRPC服务器通信吗?

时间:2019-10-21 11:52:54

标签: sockets tcp protocol-buffers grpc

我有两台机器通过TCP互相通信,而机器A使用机器B的服务。理想情况下,我很想为此使用RPC框架。因为我们已经使用了protobuf,所以想到了gRPC。

但是,机器A已经使用包装TCP套接字的外部库进行通信,因此客户端应用程序代码只能将原始字节(以protobuf编码)发送到机器B。所以我想知道我是否可以使代码适应工作在机器B上使用gRPC服务器。

1 个答案:

答案 0 :(得分:0)

gRPC建立在http / 2的基础上,理论上您可以使用任何类型的连接(例如域套接字,命名管道)来使用gRPC进行通信,因此当然可以。实际上,至少在默认情况下,gRPC默认使用TCP。

如果仅要求机器A使用TCP套接字进行通信,但是您可以使用外部库,那么使用您选择的语言的gRPC库在Windows之上实现客户端/服务器交互应该相当容易。原始的TCP套接字。

另一方面,如果您不能使用gRPC库,尽管仍然有可能,您将不得不自己实现gRPC协议,如果可以的话,还可能要实现http / 2。不要使用任何外部库;这可能需要大量工作,并且最好为您的用例创建一个更简单的即席RPC协议。

编辑

更新的问题使要求更加明确。如果您需要使用特定的TCP库,但可以在其之上使用gRPC,那么我认为任务的难度实际上取决于编程语言。

例如,在创建过程中,就像创建包装器结构一样简单,为其实现navigationOptions接口,并在创建客户端时将其与net.conn选项一起使用。在c ++中,看起来会更加困难,并且需要implementing a custom transport(尽管我对c ++ gRPC API并不熟悉,所以可能会有更简单的方法)