死简单的POSIX C ++ IPC

时间:2012-10-10 01:45:57

标签: c++ posix ipc

我感兴趣的是一个c ++ linux-only(可能放宽到posix-only)的IPC解决方案,其行为如下;启动了一个名为“计算器”的程序,可以收听消息。计算器将有一个循环,定期检查消息字符串,然后根据其内容对其进行操作。

另一个名为'send_msg'的程序可以向其pid发送消息(理想情况下是主机名/ pid,通过tcp或udp)。

$ calculator &

// awhile later

$ send_msg <calculator pid> show calculations
Calc1: 52% complete
Calc2: 21% complete
$ send_msg <calculator pid> alter Calc2 <numeric parameters>
Ok! I'm restarting my calculations!
$

我非常精通c ++,但对网络编程一无所知,也不想花很多时间来学习它。是否有一个易于使用的c ++包,可以做到这一点?我宁愿不必选择端口号,文件位置等等。

3 个答案:

答案 0 :(得分:2)

我认为你可能喜欢zeromq(拼写为0mq)或分叉crossroadsio,因为它们抽象了许多手持操作,允许你简单地发布/ sub,以及许多其他模式。 0mq有一堆例子,从简单的乒乓球开始。

答案 1 :(得分:0)

我认为你要求的设置不是简单的。

您可能最好使用Unix域套接字或TCP套接字(端口号)来进行背景计算器和前端之间的通信。因此,例如,您可以运行:

calculator -p 3456 &

计算器正在侦听端口3456.然后,您的send_msg程序可用于使计算器执行操作:

send_msg -p 3456 show calculations

当计算器收到消息时,它根据命令行动,将答案发送回套接字上的send_msg程序,然后将其回显到其标准输出。

同时,你有一个可能需要多线程的计算器。它还需要能够确定每次计算涉及的工作量,以便它可以报告每次计算的进度。你和我都没有说明如何设置计算,但它可能是:

send_msg -p 3456 new calc.file

表示计算器应该开始新的计算,从文件calc.file中读取问题。它可能会回应:

Calc1: ETC = 3:15

其中,通过一些或多或少的狡猾手段,它确定估计完成时间(ETC)为3分15秒。您可以以类似的方式设置第二个计算。要处理此问题,您需要一个侦听来自send_msg的连接的控制器线程。当它被告知创建一个新作业时,它会启动一个新线程(或进程)来进行计算。计算器中的主线程与实际计算线程之间必须有一些商定的机制。这可能就像每个线程写入进度并且主要读取的位置一样简单。但计算线程需要跟踪他们完成了多少工作,剩下多少工作,以及是否需要更改估算。

现在,我可能会把事情弄得太复杂,但是你展示的界面表明可能需要类似的东西。如果您对计算器进行单线程处理,则必须对您设置的每个计算进行某种循环调度,并定期检查send_msg程序是否已发送新消息。

答案 2 :(得分:0)

看看RCF - 它是原生C ++并且有publish/subscribe支持,这应该会让这很容易。