我在哈斯克爾簡單的角色模型,其中 每個演員試驗:如何在zeromq中創建一個「唯一」套接字?
- 是一個Haskell線程
- 具有其所接收消息
有些演員一zeroMQ PULL插座是「衆所周知的」,具有無限的生存期,因此它們的套接字綁定到一個衆所周知的端口。其他演員 是短暫的和短暫的,因此需要分配給他們的隨機自由端口 。
我以前不知道的zmq3的,允許結合 到一個臨時端口的能力,如下所述: http://api.zeromq.org/3-2:zmq-tcp
因此,對於短暫的演員我現在有試圖 代碼綁定到一個自由港在給定的範圍內。這適用於 ,但是會帶來一個zmq行爲,這會導致我產生以下問題:如果瞬間演員關閉它的端口並退出,並且新的瞬態演員啓動,那麼它可能會綁定到與舊演員相同的端口 。在這種情況下,任何未完成或後續排隊等待舊演員的消息將被 接收到新消息。
我怎樣才能避免這種情況?
如果我使用通配符綁定我的瞬態演員套接字以獲得 系統分配的臨時端口,我是否仍然可能會看到 這個問題?
如何使用TCP 傳輸方式生成一個新的唯一PULL套接字,並保證與其他傳輸方式不同?
_IN一般用法,你只能使用穩定的bind(),「衆所周知」的演員,而你使用connect()瞬態actors_ 瞬態演員仍然需要提供一個地址到其他 參與者可以發送郵件。它不知道這些將是誰,所以 沒有任何「連接」。 我想我所說的是,我期望連接()到我發送消息的 。這可能來自「知名」演員 到瞬態,反之亦然。 – timbod 2013-04-05 10:26:52
你的建築對我來說聽起來很奇怪。如果其他演員需要知道暫時演員的地址,則必須將該地址傳遞給其他演員。無論是與其他演員有一些穩定的地址,以便您可以通過ZeroMQ給他們新的地址(在這種情況下,你不需要向他們發送地址,因爲你可以建立從瞬態演員側面的連接),或者你有一個帶外連接(在這種情況下,爲什麼使用ZeroMQ?)。請記住,在ZeroMQ中,PUSH與PULL和connect vs bind是正交的。 – djc 2013-04-05 11:08:16
它似乎並不怪我:-)你不需要帶外 連接。考慮這種情況:在短暫的演員將在用戶的PC上運行,啓動和停止要求 - 如果他們綁定到一個 地址,他們需要臨時端口。他們會通過知名的位置服務發現對方,但直接連接。因此,對於每對需要通信的瞬態過程,一方必須綁定到一個地址。 – timbod 2013-04-06 05:28:17