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