gpt4 book ai didi

java - 哪种 rpc/消息传递框架最适合这种情况?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:13 24 4
gpt4 key购买 nike

用例:一个 Java 进程与一个或两个 C++ 进程,总是在同一台机器上。需要双向、二进制、非持久通信。其中一个 C++ 进程负责实例化其他进程。

我环顾四周,看到了 XML/JSON-RPC、Protocol Buffers、Thrift、zeromq 等东西。

如果可能的话,可移植性会很好,但需要 Windows XP/7。

最佳答案

一般来说,您应该在设计中将消息传输和消息反序列化分开,并尽可能使它们保持正交。简而言之,将数据(消息)流行为与消息内容分离。

  1. 有几种面向消息的传输框架,允许在客户端/服务器通信的某些行为模式(请求/回复、发布/订阅、推/拉等)之间发送和接收中性有效负载数据(消息)线程、进程和网络服务作为客户端和服务器实例。
  2. 有许多框架可以以传输中立的方式(例如,提供一种有线格式来交换与机器字节序无关的 native 整数数据)方式对您的有效负载(消息)数据进行反序列化/序列化。
  3. 您的特定用例的最佳组合选择取决于您对设计决策的许多要求和限制:

    • 作为线程、进程或服务器/进程的客户端/服务器处理单元的可扩展性
    • 整体性能和消息延迟
    • 处理单元资源要求(例如堆内存或代码大小)
    • 网络资源影响(通过网络接口(interface)发送的内容)
    • 等...

可能的解决方案:
我认为 ZMQ messaging framework结合 Google Protobuf消息框架可以为您的用例提供可行的解决方案。 有语言绑定(bind)和 (请参阅 ZMQ Java binding),您将拥有针对进程间和线程间通信的优化实现。 ZMQ 连接以类似套接字的方式设计,支持双向(请求/回复)通信模式以及单向(发布/订阅、推送/拉取)。

如前所述,消息内容的格式由您决定,但是 Google Protobuf可能适用于内部定义的消息协议(protocol),支持 C++ 和 Java 语言绑定(bind)。 Google Protobuf还提供了一种机制来定义 RPC service interfaces ,但您必须为客户端/服务器实现提供具体的消息传输协议(protocol)。我从未通过 ZMQ 传输实现这一点,但如有必要,应该可以实现。

XML/JSON-RPC 可能被考虑用于发布(例如通过 REST 服务)协议(protocol)(使用 ZMQ 桥接相当容易)。

考虑到您的要求,我猜后一种协议(protocol)格式选项不是必需的,但可能会有用,具体取决于您打算与 Java/C++ 参与者一起使用的框架。

AFAIK ZMQ 符合您对 Windows XP/7 平台的可移植性限制。不确定,但 Windows 系统上的线程间通信可能存在限制。但这似乎不适用于您所描述的场景。

替代传输框架:

  1. ActiveMQ
  2. Boost asio (C++ 包装 native 套接字,我不知道 java 方面可以随意增强此信息)

备用消息编码/解码框架:

  1. XML-RPC C++/java (通常假设 HTTP 传输)
  2. JSON

关于java - 哪种 rpc/消息传递框架最适合这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com