TCP 套接字客户端和 protobuf 可以与 gRPC 服务器通信吗?
Can a TCP socket client and protobuf talk to a gRPC server?
我有两台机器通过 TCP 相互通信,机器 A 使用机器 B 的服务。理想情况下,我喜欢为此使用 RPC 框架。因为我们已经使用了 protobuf,所以想到了 gRPC。
但是,机器 A 已经使用了一个包装 TCP 套接字的外部库来进行通信,因此客户端应用程序代码只能将原始字节(以 protobuf 编码)发送到机器 B。所以我想知道我是否可以调整代码在机器 B 上使用 gRPC 服务器。
gRPC 建立在 http/2 之上,理论上您可以使用任何类型的连接(例如域套接字、命名管道)使用 gRPC 进行通信,因此这当然是可能的。事实上,至少在go中,gRPC默认使用TCP。
如果需求只是机器A使用TCP套接字通信,但是你可以使用外部库,那么使用你选择的语言的gRPC库来实现应该是相当容易的 client/server在原始 TCP 套接字之上进行交互。
另一方面,如果您不能使用 gRPC 库,虽然仍然可以,但您必须自己实现 gRPC 协议,并且可能 http/2如果您不能使用任何外部库,也可以使用一个;这可能需要大量工作,您最好为您的用例创建一个更简单的临时 RPC 协议。
编辑
更新后的问题使要求更加清晰。如果你需要使用特定的 TCP 库,但你可以在其之上使用 gRPC,那么我认为任务的难度真的取决于编程语言。
例如,在 go 中,它就像创建一个包装器结构一样简单,为它实现 net.conn
接口,并在创建客户端时将它与 withDialer
选项一起使用。在 C++ 中,它看起来会更困难并且需要 implementing a custom transport(虽然我对 C++ gRPC API 不太熟悉,所以可能有更简单的方法)
我有两台机器通过 TCP 相互通信,机器 A 使用机器 B 的服务。理想情况下,我喜欢为此使用 RPC 框架。因为我们已经使用了 protobuf,所以想到了 gRPC。
但是,机器 A 已经使用了一个包装 TCP 套接字的外部库来进行通信,因此客户端应用程序代码只能将原始字节(以 protobuf 编码)发送到机器 B。所以我想知道我是否可以调整代码在机器 B 上使用 gRPC 服务器。
gRPC 建立在 http/2 之上,理论上您可以使用任何类型的连接(例如域套接字、命名管道)使用 gRPC 进行通信,因此这当然是可能的。事实上,至少在go中,gRPC默认使用TCP。
如果需求只是机器A使用TCP套接字通信,但是你可以使用外部库,那么使用你选择的语言的gRPC库来实现应该是相当容易的 client/server在原始 TCP 套接字之上进行交互。
另一方面,如果您不能使用 gRPC 库,虽然仍然可以,但您必须自己实现 gRPC 协议,并且可能 http/2如果您不能使用任何外部库,也可以使用一个;这可能需要大量工作,您最好为您的用例创建一个更简单的临时 RPC 协议。
编辑
更新后的问题使要求更加清晰。如果你需要使用特定的 TCP 库,但你可以在其之上使用 gRPC,那么我认为任务的难度真的取决于编程语言。
例如,在 go 中,它就像创建一个包装器结构一样简单,为它实现 net.conn
接口,并在创建客户端时将它与 withDialer
选项一起使用。在 C++ 中,它看起来会更困难并且需要 implementing a custom transport(虽然我对 C++ gRPC API 不太熟悉,所以可能有更简单的方法)