【问题标题】:Protocol Buffers - RPC协议缓冲区 - RPC
【发布时间】:2015-08-13 20:42:48
【问题描述】:

我正在尝试在 PC 上的 Windows(运行 C# 应用程序)和 SoC 板上的 linux(运行 C++ 应用程序)之间建立消息传递服务(通过 TCPIP)。我浏览了谷歌的协议缓冲区,并认为我可以将结构(数据结构)序列化到一个缓冲区中,并将这个缓冲区写入套接字(也看到了一个例子)。

我的问题,还有其他方法可以做到这一点吗?协议缓冲区-RPC 有什么作用?我浏览了他们的文档,但他们没有具体说明如何使用 TCPIP 进行操作。也许有人有此示例或详细文档?

谢谢你, 卡提克。

【问题讨论】:

  • 协议缓冲区只是数据格式。您可以根据需要发送它们。或者你可以使用gRPC,Google 的 RPC 系统。
  • @ughoavgfhw:我浏览了他们为 gRPC 提供的示例。它用于本地主机,我希望它通过 TCPIP。那里的文档没有涵盖如何执行此操作,否则我可能完全错过了它。你有关于如何使用 gRPC 的示例或文档吗?谢谢!
  • 除了那个链接,我什么都没有。但我很确定您应该能够将“localhost”替换为 IP 地址或主机名,它会起作用。

标签: protocol-buffers


【解决方案1】:

我的问题,还有其他方法吗?

有很多方法可以做到这一点。 Google Protocol Buffers 是用于跨平台对象序列化的库。您可以通过多种不同方式共享此序列化数据。 我建议您使用 ZMQ (ZMQ GUIDE),它非常适合像您这样的应用程序。

我有一个与您类似的用例。我在 Raspberry Pi 和 Python ZMQ 客户端上编写了 Linux C++ ZMQ 服务器,专门用于遥测和远程管理目的。该库高效、轻量级,可与 Google Protocol Buffers 完美配合,并绑定到所有主要编程语言。如果您决定使用此库,请随时向我询问有关工作代码示例的信息。

【讨论】:

  • 我们希望有一个 RPC 来避免对我们拥有的所有函数进行字节解码。这就是我一直在寻找 gRPC 工作原理的原因。我们还没有决定使用什么。
  • 我理解您的担忧。我知道协议缓冲区附带 RPC 支持,但是它们是实现面向数据包传输的更好方法。其中一种方法是 ZMQ 网络库。它是高效、轻量级但功能强大的工具。它不仅支持简单的客户端-服务器通信,如 RPC 模型,还支持许多其他通信模式,如发布-订阅(异步通知许多注册到某个事件的客户端的模式)推拉(将任务分配给工作人员的模式)等等。我真的鼓励你和这个库相处。
【解决方案2】:

查看有关如何对协议缓冲区有线格式进行编码的 Google Developers 页面是否有助于解决您的问题:https://developers.google.com/protocol-buffers/docs/encoding

【讨论】: