zeroMQ初體驗 11 節點間的協作

2021-08-25 18:45:07 字數 1625 閱讀 9726

1.節點間是可以調節的,而執行緒間不是(執行緒是穩定的),pair模式是非自動連線的.

2.執行緒數是固定的,可預估的。而節點則是變動、不可預估的。

由此得出結論:pair適用於穩定、可控的環境。

所以,有了本章節。不知諸位還記得前面所講的[url=發布/訂閱模式[/url],在那裡曾說過這種模式是不太穩定的(主要是指初始階段),容易在連線未建立前就發布、廢棄部分資料。在這裡,通過節點間的協作來解決那個難題。

模型圖:

[img]

發布端:

import zmq

subscribers_expected = 2

def main():

context = zmq.context()

publisher = context.socket(zmq.pub)

publisher.bind('tcp://*:5561')

syncservice = context.socket(zmq.rep)

syncservice.bind('tcp://*:5562')

subscribers = 0

while subscribers < subscribers_expected:

msg = syncservice.recv()

syncservice.send('')

subscribers += 1

print "+1 subscriber"

for i in range(1000000):

publisher.send('rhubarb');

publisher.send('end')

if name == 'main':

main()

訂閱端:

import zmq

def main():

context = zmq.context()

subscriber = context.socket(zmq.sub)

subscriber.connect('tcp://localhost:5561')

subscriber.setsockopt(zmq.subscribe, "")

syncclient = context.socket(zmq.req)

syncclient.connect('tcp://localhost:5562')

syncclient.send('')

syncclient.recv()

nbr = 0

while true:

msg = subscriber.recv()

if msg == 'end':

break

nbr += 1

print 'received %d updates' % nbr

if name == 'main':

main()

由上例可見,通過應答模式解決了之前的困擾,如果還不放心的話,也可以通過發布特定引數,當訂閱端得到時再應答,安全係數便又公升了一級。不過這裡有個大前提,得先通過某種方式得到或預估乙個概念數來確保應用的可用性。

(未完待續)

ultratree的使用(一) 節點間的拖動

對節點的拖動通常需要三個步驟 選擇需拖放節點,選擇拖放位置和執行操作。如果需要實現多個節點同時拖放的話,那麼就要在建構函式中設定多選功能 ultratree2.override.selectiontype selecttype.extendedautodrag 實現多選功能 在這之前需要設定個全域性...

ultratree的使用(二) 節點間的選擇關聯

為了讓使用者在對樹的執行過程中方便,通常在選擇中都要有節點的關聯操作。那麼要想關聯必要先有checkbox或者raidobutton來對他們操作 this ultratree2.override.nodestyle nodestyle.checkbox 有了選擇的東西,那麼就可以操作了。privat...

ultratree的使用(一) 節點間的拖動

原文 對節點的拖動通常需要三個步驟 選擇需拖放節點,選擇拖放位置和執行操作。如果需要實現多個節點同時拖放的話,那麼就要在建構函式中設定多選功能 selecttype.extendedautodrag 實現多選功能 在這之前需要設定個全域性變數 拖放位置的節點。private ultratreenod...