2014-01-30 67 views
1

我的机器中有10个进程,每个进程都应该有相互通信的能力。 现在情景是所有10个进程都应该处于监听状态,以便任何进程都可以随时与之通信。当需要时,它应该能够将消息传递给任何进程。 我想用C++和unix tcp/udp套接字进行编码。但我不明白如何构造它。我应该使用UDP还是TCP,哪个更好?一个进程如何能够同时监听和发送数据。多路进程间通信

我需要帮助。

+0

异步读写功能来列出并同时写入 –

+0

哪种环境? * NIX?视窗? –

+0

通常,会创建一个新的线程从套接字读取。 –

回答

0

您可以运行的每个过程,严苛&跨度9点多线程其他进程连接为客户端。

+0

可以请您详细说明。我不明白 – user3253591

+0

每个进程将侦听1个端口(将在此端口接收数据)。如果进程想将消息发送到任何其他进程可以作为客户端发送给他们。 –

1

UDP的TCP VS的决定取决于你的消息,不管他们是否需要被可靠地传递等

对于纯TCP,每个对等会对每个进程接受来自其他连接的TCP套接字同行(每个接受都会导致一个新的套接字)。这个新的套接字是双向的,可以用来从一个对方发送/接收到另一个对方。有了这个解决方案,你需要某种发现机制。

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

发现机制既可以是具有公知的另一对等端(经由配置等)的地址,或者可能可以使用UDP广播的发现机制。

zeroMQ,这是一个比原始套接字略高层面上来讲,你将有一个单一的ROUTER插座上,您正在收听和recieving数据,并在每个您要发送的数据对一个DEALER插座。

不管解决方案,你可能会需要使用处理轮询()的网络连接或类似的东西一个线程,并且收到消息,你需要处理邮件另一个线程(或线程池)。

0

这个问题适用于任何语言,所以答案不是C++相关的。

当给定一个选择,寻找一个库中的一个更简单的通信(例如Apache的节俭)。

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

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

另外,你需要某种形式的计划,以找出哪些端口发送到达的过程,并与TCP,你需要决定是否使用静态连接或连接要发送的每一次。

0

你想做的事似乎是消息传递。

试图建立它自己之前,先来看看提升MPI