2

我有一个应用程序,我需要通过两台机器之间的专用以太网连接从运行在 Windows 上的 .NET 应用程序向运行在 Linux 上的 C++ 应用程序发出命令。

与其滚动我自己的协议,我更喜欢使用一些标准形式的 RPC。以前我在跨平台应用程序中使用过 XML RPC,但是这些特定的命令需要包含大量的数字数据(每个命令有几千个双浮点值),并且经常发送命令,所以我在想某种二进制序列化更合适。因此,我开始研究协议缓冲区。

所以,有几个问题:

  1. 我知道 Protocol Buffers 定义了一种序列化格式,但是对于如何使用它们执行跨平台 RPC,是否有任何公认的行业标准?
  2. 协议缓冲区是否非常适合表示具有可变大小数组的嵌套数据结构?每个命令的点数是可变的,部分数据最自然的表示是一个结构数组,每个结构都包含一个点数组。对于任何给定的命令,所有这些数组的大小都是可变的。
  3. 在使用 Protocol Buffers 进行跨平台通信时,您是否遇到过任何问题?
4

1 回答 1

3
  1. 不,没有普遍接受的标准。一些库带有自己的 RPC 实现,但似乎没有一个特别受欢迎。(编辑:截至 2019 年,gRPC变得非常流行。)

  2. 在我看来相当不错。一些库甚至允许延迟解码,因此如果您只需要部分数据,则无需解码所有嵌套结构。

  3. 除了未定义 RPC 格式外,未定义消息的框架。所以你必须做一些自定义方法,比如在开头添加一个长度字段。另一个未定义的部分是如何识别正在传输的消息的类型。确保为您自己的项目明确定义这些。

于 2013-10-02T17:03:26.737 回答