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...