2015-09-28 112 views
0

這裏是我的計劃:
我有很多代理和一個代理管理器。
如果一個代理運行,它將連接代理管理員說:我是代理。
代理管理器可以控制所有運行代理。例如,代理經理可以說:agent1,plz做某事。這裏有一個例子:
如何在這種情況下使用ZeroMQ設計結構

*****************      ********* 
* agent manager * <-----I'm agent1----- * Agent * 
*    * ---------OK---------> *  * 
*    *      *  * 
*    * ---calculate 1+1----> *  * 
*    * <-------It's 2------- *  * 
*    * -------go sleep-----> *  * 
*    * <--OK, I'm sleeping-- *  * 
*    * ------wake up-------> *  * 
*    * <---------OK--------- *  * 
*    * ---calculate 1+2----> *  * 
*    * <-------It's 3------- *  * 
*****************   ...   ********* 

我使用REQ/REP考慮,但現在看來,這是行不通的。因爲事情發生像這樣:請求---回覆---回覆---請求---回覆---請求...

此外,我們可能有多個代理。這意味着代理經理可以同時控制許多代理。所以我想用多線程,但我的老闆不同意。他現在想要使用單線程。所以我認爲我應該使用「非阻塞」模式。

那麼我怎麼能設計一個0MQ模式的這種情況與非阻塞?

回答

2

使用經銷商(代理)/路由器(代理管理器)。它們將會替代REQ/REP,因爲它們或多或少是相同的,只是具有非結構化的通信模式。您的代理管理器將在消息的第一幀中收到每個代理的ID作爲通信的一部分。它需要跟蹤這些ID,以便它可以啓動與他們的通信。有一些示例說明ZMQ guide中的工作方式,如果沒有,您應該閱讀這些示例。具體來說,看看this section看看它是如何工作的。快速圖:

DEALER1-setID('agent1')      ROUTER-bind() 
DEALER1-connect()--------------------------------> * 
DEALER1-send("I'm agent1")--------------> ROUTER-recv(['agent1', "I'm agent1"]) 
DEALER1-recv('OK') <----------------------ROUTER-send(['agent1', 'OK']) 



DEALER2-setID('agent2') 
DEALER2-connect()--------------------------------> * 
DEALER2-send("I'm agent2")--------------> ROUTER-recv(['agent2', "I'm agent2"]) 
DEALER2-recv('OK') <----------------------ROUTER-send(['agent2', 'OK']) 


DEALER1-recv('calc 1+1') <----------------ROUTER-send(['agent1', 'calc 1+1']) 
DEALER2-recv('calc 1+2') <----------------ROUTER-send(['agent2', 'calc 1+2']) 

DEALER1-send("It's 2")------------------> ROUTER-recv(['agent1', "It's 2"]) 
DEALER1-recv('go sleep') <----------------ROUTER-send(['agent1', 'go sleep']) 
DEALER2-send("It's 3")------------------> ROUTER-recv(['agent2', "It's 3"]) 
DEALER1-send("OK, I'm sleeping")--------> ROUTER-recv(['agent1', "OK, I'm sleeping"]) 

...等等。我故意插入了消息響應,只是爲了演示它如何處理需要花費不同時間的更復雜的作業。 ROUTER以一種您可以訪問的方式接收ID,並由ROUTER發送但由DEALER剝離的方式與這些套接字類型的操作方式有關。你只需要跟蹤這些ID,知道哪些正在使用,並只發送給那些還沒有工作的人,直到你收到回覆。

相關問題