簡體   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