2011-01-28 89 views
4

我必须在运行在同一系统上的java/C++/python进程之间实现IPC机制(发送短消息)。一种实现方法是使用TCP协议的套接字。这需要维护连接和其他相关活动。 相反,我正在考虑使用UDP协议,它不需要连接,我可以发送消息。 我的问题是,在同一台机器上(对于IPC)UDP是否仍然具有相同的缺点,它适用于跨机器通信时(如不可靠的数据包传输,乱序数据包)用于进程间通信的UDP

回答

3

是的,仍然是不可实现的。通信尝试使用命名管道或共享内存

编辑:

不知道你的应用程序的要求,你有没有考虑像MPI(altough的Java不能很好地支持...),或储蓄? (http://thrift.apache.org/

+0

命名管道将无法使用java – madhu 2011-01-28 12:26:41

+1

+1节俭链接 – vz0 2011-01-28 13:26:12

1

本地UDP仍然是联合国可靠,但主要优点是UDP多播。你可以有一个数据发布者和许多数据订阅者。内核负责为你的每个用户提供一份数据报的副本。

另一方面,Unix本地数据报套接字需要可靠,但它们不支持多播。

+0

对不起,我不明白这一点。你是说UDP组播比普通的UDP更可靠吗?在回送接口上使用UDP多播也是一个好主意,以实现跨进程pub/sub带机内边界。 – madhu 2011-01-31 06:57:59

0

本地UDP仍然不可靠,有时被防火墙阻止。我们在使用本地UDP进行线程间通信的MsgConnect产品中遇到了这个问题。顺便说一句MsgConnect可以是你的任务的一个选项,所以你不需要处理套接字。不幸的是,没有Python绑定,但存在“本地”C++和Java实现。

1

本地UDP比网络更不可靠,比如50%+丢包不可靠。这是一个糟糕的选择,内核开发人员将质量归因于缺乏需求。

我会推荐调查基于消息的中间件,最好使用BSD套接字兼容接口,以便于学习曲线。一个建议是ZeroMQ其中包括C++,Java和Python绑定。