具有请求-响应模式的双向消息传递(用于数据序列化的 Protobuf)



基本问题如下:

  • 两个节点通过单个套接字进行通信;
  • 请求-答复模式;
  • 两个节点都是客户端和服务器,即节点A向节点B发出请求,节点B向节点A发出请求;

这可以通过两个插座轻松解决,但我只有一个。您可以将问题视为必须在单个套接字上创建多个虚拟套接字/通道您知道一个经过良好测试的消息传递库可以支持此类用例吗?


另外:

  • 支持C++和Java;
  • 数据序列化由我使用Google协议缓冲区处理;和
  • 如果可以使用RPC实现所有这些,那就太好了,否则我将使用protobuf进行管理。

我宁愿不必编写自己的库并使用经过良好测试和良好支持的东西。我已经研究了 ZeroMQ,但它似乎不支持第三个要求(通过单个套接字同时从 A 到 B 以及从 B 到 A 的请求-回复模式(。RabbitMQ 是另一种可能性,但也可能不支持此要求。(我没有使用这些库的经验,所以也许我错了......

(我想知道我是否要求太多。

我没有一个完整的答案,但我注意到你所要求的得到了Cap'n Proto的RPC协议的强烈支持:可以在任一方向发起调用。

这不是您想要的,因为:

  • Cap'n Proto 有自己的序列化格式。使用模型在很大程度上受到Protobufs的启发,但它不是protobufs。
  • Java实现尚不支持RPC(尽管计划(。
  • 如果你关心Windows:C++实现还不支持MSVC上的RPC,主要是由于MSVC在C++11支持方面严重落后。

但如果没有别的,可能值得一试,寻找灵感。

(披露:我是Cap'n Proto的作者,也是Google大部分开源Protobuf代码的作者。

最新更新