zeromq:官網
安裝demo及各語言繫結
golang繫結
實驗環境:win10 x64/centos6 x86 zeromq4.0.6
zmq三種模式:push/pull、pub/sub、req/resp
一、push/pull模式:
a程式push**如下:
import zmqb程式pull**如下:import time
context =zmq.context()
sender =context.socket(zmq.push)
sender.bind(
"tcp://*:5557")
for task_nbr in range(1000
): workload = '
task2---
'+str(task_nbr)
sender.send_string(u'%s
' %workload)
time.sleep(
0.1)
import timea程式準備傳送1000個task任務,完事退出;b程式一直pull。import zmq
context =zmq.context()
receiver =context.socket(zmq.pull)
receiver.connect(
"tcp://localhost:5557")
while
true:
s =receiver.recv()
time.sleep(
1)
a先啟動,此時push會一直阻塞,直到有乙個pull連線,task才發出,假如中途b掛掉,a也繼續進入阻塞,b再次上線,pull開始從上次a阻塞時的任務拉取。假如a掛掉,task任務傳送中斷,則b一直pull到a掛前發出的任務為止,這時候a再重啟上線,則是另一回事了,任務for迴圈又重新開始,b繼續。
b先啟動,a後啟動,場景和以上a先啟動一樣。
push一端具有負載均衡功能,pull一端可以多啟動幾個例項,均衡執行task,若中途pull一端掛掉,則push自動把任務分發到其他pull上。
二、 pub/sub模式
a程式**如下:
pub_queue =queue.queue()bcd**如下:context =zmq.context()
publisher =context.socket(zmq.pub)
publisher.bind(
"tcp://*:5557")
while
true:
publisher.send_string(msg)
context =zmq.context()a pub端通過sub端subscriber.setsockopt(zmq.subscribe, "2")的「2」過濾資訊,sub端可以訂閱多個。遠端公網使用該模式,需要pub端定期維持心跳包,比如半分鐘pub一條資訊。subscriber =context.socket(zmq.sub)
subscriber.connect(
"tcp://*:5557")
subscriber.setsockopt(zmq.subscribe, "2
")while
true:
contents =subscriber.recv()
print("%s
" % contents)
三、req/resp模式
a程式**如下:
import zmqb程式**如下:context =zmq.context()
socket =context.socket(zmq.req)
socket.connect(
"tcp://localhost:5555")
for request in range(10
): socket.send(b
"hello")
message =socket.recv()
"received reply %s [ %s ]
" % (request, message)
import time可以沒有先後啟動順序,假如a先啟動,阻塞;假如b先啟動,等待請求接入。import zmq
context =zmq.context()
socket =context.socket(zmq.rep)
socket.bind(
"tcp://*:5555")
while
true:
message =socket.recv()
time.sleep(1)
socket.send(b
"world
")
過程中,假如a掛掉,再啟動,可以繼續請求應答;而假如時b服務端掛掉再重啟,則a客戶端已經連不上了,阻塞。情形和以上幾種模式一樣的。
總結:以上是通過官網python bind的原始碼做的實驗。雖然不要求客戶端/服務端的先後啟動次序,但是中途若是服務端掛掉再啟動,就是另一種情況了。在表現形式上來說,似乎此時的c/s線路不再是掛掉之前的,而是服務端又啟動了一條線路一樣。這個時候,就需要客戶端去檢測判斷服務端狀態,以確定重連機制。到底是不是這樣呢?需要深入zeromq的**一看究竟了!
ZeroMQ各模式總結
zeromq基本的模式有三種 請求 應答 訂閱 分發 管道 請求應答模式中,應答端必須先啟動,不然請求端無法連線到應答端,rep req 這兩個套接字的非阻塞版本,叫做xreq和xrep.這些 擴充套件的請求 應答 套接字允許你通過中介軟體擴充套件請求 應答模型 訂閱 分發模式,無先後啟動問題,pu...
ZeroMQ 推拉模式
推拉模式,push傳送,send。pull方接收,recv。push可以和多個pull建立連線,push傳送的資料被順序傳送給pull方。比如你push和三個pull建立連線,分別是a,b,c。push傳送的第一資料會給a,第二資料會給b,第三個資料給c,第四個資料給a。一直這麼迴圈。推拉模式可分為...
zeromq 模式說的很地道
2013 10 20 20 59 fq 瀏覽815次 2013 10 20 22 08 提問者採納 很早就聽說了zeromq 這個專案,當時不太在意.後來同事kasicass 對這個專案做了研究和分享 開始重視起這個專案來.1 libevent封裝了對網路i o,訊號,定時器等的處理,可以基於它之上...