我必须在同一系统上运行的java / c ++ / python进程之间实现IPC机制(发送短消息)。一种实现方法是使用TCP协议使用套接字。这需要维护连接和其他相关活动。 相反,我正在考虑使用不需要连接的UDP协议,我可以发送消息。 我的问题是,同一台机器上的UDP(对于IPC)是否仍然具有相同的缺点,它适用于跨机器通信(如不可靠的数据包传输,无序数据包。
答案 0 :(得分:3)
是的,仍然是不可行的。对于本地通信,尝试使用命名管道或共享内存
编辑:
不知道你的应用程序的要求,你是否考虑过类似MPI(尽管没有得到很好的支持......)或者Thrift? (http://thrift.apache.org/)
答案 1 :(得分:1)
本地UDP仍然不可靠,但主要优点是UDP多播。您可以拥有一个数据发布者和许多数据订阅者。内核负责为您提供数据报副本给每个订户。
另一方面,Unix本地数据报套接字必须可靠,但它们不支持多播。答案 2 :(得分:1)
本地UDP比在网络上更不可靠,例如50%+数据包丢弃不可靠。这是一个糟糕的选择,内核开发人员将质量归结为缺乏需求。
我建议调查基于消息的中间件,最好使用BSD套接字兼容接口,以便轻松学习曲线。建议是ZeroMQ,其中包括C ++,Java和Python绑定。
答案 3 :(得分:0)
本地UDP仍然不可靠,有时会被防火墙阻止。我们在MsgConnect产品中遇到了这个问题,该产品使用本地UDP进行线程间通信。 BTW MsgConnect可以作为您的任务的一个选项,因此您不需要处理套接字。不幸的是,没有Python绑定,但存在“本机”C ++和Java实现。