繁体   English   中英

死简单的POSIX C ++ IPC

[英]Dead-simple POSIX C++ 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 ++包,可以做到这一点? 我宁愿不必选择端口号,文件位置等等。

我想你可能会喜欢zeromq (拼写为0mq),或者分叉的十字路口 ,因为它们抽象了很多手柄,允许你简单地发布/ sub,以及许多其他模式。 0mq有一堆以简单的乒乓球开头的例子。

我想,你要求的设置不过是简单的。

对于背景计算器和前端之间的通信,您可能最好使用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程序是否发送了新消息。

看看RCF - 它是原生的C ++并且具有发布/订阅支持,这应该使这很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM