多路进程间通信

时间:2014-01-30 14:45:55

标签: c++ sockets tcp ipc

我的机器中有10个进程,每个进程都应该具有相互通信的能力。 现在,该场景是所有10个进程都应处于侦听状态,以便任何进程可以随时与之通信。再次需要时,它应该能够将消息传递给任何进程。 我试图用C ++和unix tcp / udp套接字编写代码。但是我不明白如何构建它。我应该使用UDP还是TCP,这会更好吗?进程如何同时监听和发送数据。

我需要帮助。

4 个答案:

答案 0 :(得分:1)

UDP与TCP的决定取决于您的消息,无论是否需要可靠传递,等等。

对于纯TCP,每个对等体都有一个TCP套接字,每个进程都接受来自其他对等体的连接(每个接受都会产生一个新的套接字)。这个新套接字是双向的,可用于从一个对等端发送/接收。使用此解决方案,您需要某种发现机制。

对于UDP,除了不需要接受套接字外,它们大致相同。你仍然需要某种形式的发现机制。

发现机制可以是具有众所周知(通过配置等)地址的另一个对等体,或者可能使用UDP广播作为发现机制。

zeroMQ而言,这是一个略高于原始套接字的级别,您将有一个ROUTER套接字,您正在监听和接收数据,还有一个DEALER每个对等端的套接字,用于发送数据。

无论解决方案如何,您可能需要一个线程来使用poll()或类似的东西来处理网络连接,并且当收到消息时,您需要另一个线程(或线程池)来处理消息。

答案 1 :(得分:0)

您可以将每个流程都视为更严格的&跨越9个线程将其他进程连接为客户端。

答案 2 :(得分:0)

此问题适用于任何语言,因此答案与C ++无关。

当给出选择时,寻找一个更容易沟通的库(例如apache-thrift)。

关于TCP / UDP:TCP通常较慢但更可靠,因此默认情况下,请选择TCP,但可能有理由选择UDP,如流,多播/广播......可靠性可能不是问题所有进程都在同一块板上,但您可能希望稍后与外部进程通信。

线程进程可以使用相同的套接字进行无锁的发送和接收。

此外,您需要某种方案来查找要发送到哪个端口以进入进程,并且使用TCP,您需要决定是使用静态连接还是每次要发送时都连接。

答案 3 :(得分:0)

你想做什么似乎是消息传递。

在尝试自己构建之前,先看看boost mpi