Sockets 进程间通信的UDP协议

Sockets 进程间通信的UDP协议,sockets,udp,ipc,Sockets,Udp,Ipc,我必须在同一系统上运行的java/c++/python进程之间实现IPC机制(发送短消息)。实现的一种方法是使用TCP协议使用套接字。这需要维护连接和其他相关活动。 相反,我想使用UDP协议,它不需要连接,我可以发送消息。 我的问题是,同一台机器上的UDP(用于IPC)是否仍有相同的缺点?它在跨机器通信时适用(如不可靠的数据包传递、无序数据包)。是的,仍然不可靠。对于本地通信,请尝试使用命名管道或共享内存 编辑: 不知道应用程序的需求,您是否考虑过类似MPI(尽管Java没有得到很好的支持…)或

我必须在同一系统上运行的java/c++/python进程之间实现IPC机制(发送短消息)。实现的一种方法是使用TCP协议使用套接字。这需要维护连接和其他相关活动。 相反,我想使用UDP协议,它不需要连接,我可以发送消息。
我的问题是,同一台机器上的UDP(用于IPC)是否仍有相同的缺点?它在跨机器通信时适用(如不可靠的数据包传递、无序数据包)。是的,仍然不可靠。对于本地通信,请尝试使用命名管道或共享内存

编辑:


不知道应用程序的需求,您是否考虑过类似MPI(尽管Java没有得到很好的支持…)或Thrift?()

本地UDP仍然不可靠,但主要优势是UDP多播。您可以有一个数据发布者和多个数据订阅者。内核为您向每个订阅者提供一份数据报副本


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

本地UDP仍然不可靠,有时会被防火墙阻止。我们在使用本地UDP进行线程间通信的产品中遇到了这一问题。顺便说一句,MsgConnect可以作为您任务的一个选项,因此您无需处理此问题遗憾的是,没有Python绑定,但是“原生”C++和java实现是存在的。

本地UDP比网络上更不可靠,比如50% +包丢弃不可靠。这是一个可怕的选择,内核开发者把质量归因于需求不足。


<>我建议您最好使用BSD兼容的接口来研究基于消息的中间件,以便于学习曲线。建议包括C++、java和Python绑定。对不起,我不理解。你是说UDP组播比普通UDP更可靠吗?n环回接口,用于在计算机边界内实现跨进程发布/订阅。UDP不可靠,无论是单播、多播还是广播。环回接口上的多播没有问题。请解释为什么UDP对于IPC不可靠。由于它从未离开主机系统,因此不应面临拥塞、b它是错误的,那么它为什么不可靠?@ Taull,因为发送/接收套接字内核缓冲区大小有限。快速生产者或慢用户可以溢出缓冲区,内核将开始删除数据报。我早先评估了ZrOMQ,它完全符合需要。但是它需要java(jar)和C++的附加库依赖性。(lib)我想使用爪哇和C++中现有的API来实现同样的目的。还想问一下UDP数据包丢失,你有一些数据或文章,这样我就可以更好地理解为什么UDP通信不可靠,在同一个机器上手工操作UDP。我道歉,对于Zrimq& java,如果YO,你必须编写自己的本机版本。你不想要JNI库。@Steve-o你能解释一下为什么本地UDP比网络上的更不可靠吗?除了网络上的障碍,本地上还有什么其他障碍?