Rha*_*aun 4 c++ java messaging rpc asynchronous
用例:一个带有一个或两个C++进程的Java进程,始终位于同一台机器上.需要双向,二进制,非持久通信.其中一个C++进程负责实例化其他进程.
我看了一下,看看像XML/JSON-RPC,Protocol Buffers,Thrift,zeromq等.
如果可能,便携性会很好,但需要Windows XP/7.
πάν*_*ῥεῖ 10
通常,您应该在设计中分离消息传输和消息解除/序列化,并使它们尽可能保持正交.简而言之,将数据(消息)流行为与消息内容分离.
对于您的特定用例,最佳组合选择是什么,取决于您对设计决策的一些要求和限制:
可能的解决方案:
我认为ZMQ消息传递框架结合Google Protobuf消息framwework可以为您的用例提供可行的解决方案.有c ++和java的语言绑定(参见ZMQ Java绑定),你将拥有进程间和线程间通信的优化实现.ZMQ连接以类似套接字的方式设计,支持双向(请求/回复)通信模式以及单向(发布/订阅,推/拉).
如上所述,消息内容的格式取决于您,但Google Protobuf可能适用于内部定义的消息协议,C++和Java语言绑定支持这些协议.Google Protobuf还提供了定义RPC服务接口的机制,但您必须为客户端/服务器实现提供具体的消息传输协议.我从来没有通过ZMQ传输实现这一点,但如果有必要,它应该是可能的.
XML/JSON-RPC可能被考虑用于发布(例如,通过REST服务)协议(使用ZMQ进行桥接非常容易).
考虑你的要求,我猜不需要后者的协议格式的选择,但可能是有用的,虽然,这取决于你打算使用Java/C++参与者使用的框架.
AFAIK ZMQ符合您对Windows XP/7平台的可移植性限制.不确定,但Windows系统上的线程间通信可能存在限制.但这似乎并不适用于您所描述的情景.
备用运输框架:
备用消息编码/解码框架: