3

我对一个 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++ 包可以完成上述操作?我宁愿不必选择端口号、文件位置等。

4

3 回答 3

2

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

于 2012-10-10T01:51:52.003 回答
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程序是否发送了新消息。

于 2012-10-10T02:38:00.937 回答
0

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

于 2012-10-10T02:49:35.430 回答