sockets - TCP 套接字客户端和 protobuf 可以与 gRPC 服务器通信吗?
问题描述
我有两台机器通过 TCP 相互通信,机器 A 使用机器 B 的服务。理想情况下,我很想为此使用 RPC 框架。想到 gRPC,因为我们已经使用了 protobuf。
但是,机器 A 已经使用了一个包装 TCP 套接字进行通信的外部库,因此客户端应用程序代码只能将原始字节(在 protobuf 中编码)发送到机器 B。所以我想知道我是否可以调整代码以使用 gRPC机器 B 上的服务器。
解决方案
gRPC 建立在 http/2 之上,理论上你可以使用任何类型的连接(例如域套接字、命名管道)来使用 gRPC 进行通信,所以这当然是可能的。事实上,至少在 go 中,gRPC 默认使用 TCP。
如果只要求机器 A 使用 TCP 套接字进行通信,但您可以使用外部库,那么使用您选择的语言的 gRPC 库在原始 TCP 之上实现客户端/服务器交互应该相当容易插座。
另一方面,如果你不能使用 gRPC 库,虽然仍然有可能你必须自己实现 gRPC 协议,如果你不能使用任何外部库,可能还需要实现 http/2 协议;这可能需要大量工作,您最好为您的用例创建一个更简单的临时 RPC 协议。
编辑
更新后的问题使要求更加清晰。如果您需要使用特定的 TCP 库,但您可以在此基础上使用 gRPC,那么我认为该任务的难度实际上取决于编程语言。
例如,在 go 中,它就像创建一个包装器结构一样简单,为它实现接口,并在创建客户端时net.conn
将其与选项一起使用。withDialer
在 c++ 中,它看起来会更困难,并且需要实现自定义传输(虽然我对 c++ gRPC API 不太熟悉,所以可能有更简单的方法)
推荐阅读
- reactjs - 错误:缩小反应错误 #130
- google-analytics - Google Analytics(分析)数据保留政策 - 批量更改?
- python - 在 MacOS 上安装 Kivy 的问题
- python - 过滤列表的索引
- javascript - 使用文本淡入 div
- c++ - 在 C++ 中使用 GDI+ 平滑动画
- javascript - 在Javascript中动态生成带有图标名称的字体真棒
- node.js - 在 Node 项目中使用 NPM 处理 CSS 文件
- dart - 如何使图像上的坐标在颤动中相对于设备屏幕动态和响应?
- vim - 在 .vimrc 的开头添加 has('vim_starting')