在我的机器中有10个进程,每个进程都应该有相互通信的能力。现在的场景是,所有10个进程都应该处于侦听状态,这样任何进程都可以在任何时候与其通信。同样,在需要时,它应该能够向任何进程传递消息。我试图用C++和unix /udp套接字对其进行编码。然而,我不知道如何构造它。我应该使用UDP还是TCP,哪个更好?进程如何能够同时侦听和发送数据。
我需要帮助。
发布于 2014-01-30 15:44:19
UDP与TCP的决定取决于您的消息是否需要可靠地传递等等。
对于纯TCP,每个对等点都有一个TCP套接字,每个进程在该套接字上接受来自其他对等点的连接(每个接受将导致一个新的套接字)。此新套接字是双向的,可用于从一个对等点发送/接收到另一个对等端。有了这个解决方案,您将需要某种发现机制。
对于UDP来说,除了您不需要接受套接字之外,这几乎是一样的。你还需要某种发现机制。
发现机制可以是另一个具有众所周知(通过配置等)地址的对等点,也可以使用UDP广播作为发现机制。
就zeroMQ而言,它的级别略高于原始套接字,您将拥有一个监听和接收数据的ROUTER套接字,以及发送数据的每个对等点的一个DEALER套接字。
无论解决方案是什么,您都可能需要一个线程来使用poll()或类似的方法来处理网络连接,而当接收到消息时,您需要另一个线程(或线程池)来处理这些消息。
发布于 2014-01-30 15:45:15
这个问题适用于任何语言,所以答案与C++无关。
当有选择时,寻找一个库来进行更容易的交流(例如apache-节俭)。
关于TCP/ UDP : TCP通常速度较慢,但更可靠,因此默认情况下,请选择TCP,但可能有选择UDP的理由,如流、多播/广播、.当所有进程都在同一块板上时,可靠性可能不是一个问题,但您可能希望稍后与外部进程进行通信。
线程进程可以使用相同的套接字发送和接收没有锁。
此外,您还需要某种方案来确定要发送哪个端口才能到达进程,而对于TCP,您需要决定是使用静态连接还是在每次发送时连接。
发布于 2014-01-30 15:55:32
你想要做的似乎是传递信息。
在尝试自己构建它之前,先看一看boost mpi
https://stackoverflow.com/questions/21459569
复制相似问题