Upload
sphere-consulting-inc
View
76
Download
4
Embed Size (px)
Citation preview
ØMQSockets on Steroids
ØMQ / ZeroMQ
• Библиотека для обмена сообщениями
• Поддерживает большинство платформ и языков
• Работает через TCP, IPC, multicast, inproc
• Простая, быстрая, легковесная
ØMQ Socket
• Агент, обменивающийся сообщениями
• Подключается 1-1, 1-N, N-N
• Имеет тип, определяющий его поведение
Установка соединения
Socket Socket
socket.bind
• tcp://*:5555
• ipc:///tmp/zqm.sock
• inproc://socket
socket.connect
• можно вызывать bind и connect несколько раз
• connect разрешен до bind
Передача сообщения
Socket Socket
• send • blocking receive
• non-blocking receive
• poll (blocking + timeout)
N - 1
Socket
SocketSocket
Socket
1 - N
Socket
SocketSocket
Socket
1
2
3
4
5
*за исключением pub/sub
REQ & REP Sockets
REQ REP
1
2
1. send
2. receive
1. receive
2. send
# server.rb
context = ZMQ::Context.new
socket = context.socket ZMQ::REP
socket.bind('tcp://*:5555')
loop do
socket.recv_string(msg = '') # blocking
socket.send_string('reply')
end
# client.rb
context = ZMQ::Context.new
socket = context.socket ZMQ::REQ
socket.connect('tcp://localhost:5555')
socket.send_string('request')
socket.recv_string(msg = '') # blocking
PUSH & PULL Sockets
PUSH PULL
send receive
PUSH PULL
PULL
PULL
PUSH
WORKER
WORKER
WORKER
PUSH
PUSH
PULL
PUB & SUB Sockets
SUB
SUBPUB
SUB
1
1
2
2
1 2
PUSH
PULL
PULL
PULL
PUSH
WORKER
WORKER
WORKER
PUSH
PUSH
PULL
SUB
SUB
SUB
PUB
ROUTER Socket
REQ
REQ
REQ
ROUTER MESSAGE
MESSAGE
MESSAGE
DEALER Socket
REP
REP
REP
DEALER
Брокер
ROUTER DEALERREQ
REQ
REQ
REP
REP
REP
Clients Workers
Балансирующий брокер
ROUTER ROUTERREQ
REQ
REQ
REQ
REQ
REQ
Clients Workers
WORKER
QUEUE
Ruby ZeroMQ implementation
github.com/chuckremes/ffi-rzmq
ZeroMQ Website
http://zeromq.org/