18
ØMQ Sockets on Steroids

Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Embed Size (px)

Citation preview

Page 1: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

ØMQSockets on Steroids

Page 2: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

ØMQ / ZeroMQ

• Библиотека для обмена сообщениями

• Поддерживает большинство платформ и языков

• Работает через TCP, IPC, multicast, inproc

• Простая, быстрая, легковесная

Page 3: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

ØMQ Socket

• Агент, обменивающийся сообщениями

• Подключается 1-1, 1-N, N-N

• Имеет тип, определяющий его поведение

Page 4: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Установка соединения

Socket Socket

socket.bind

• tcp://*:5555

• ipc:///tmp/zqm.sock

• inproc://socket

socket.connect

• можно вызывать bind и connect несколько раз

• connect разрешен до bind

Page 5: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Передача сообщения

Socket Socket

• send • blocking receive

• non-blocking receive

• poll (blocking + timeout)

Page 6: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

N - 1

Socket

SocketSocket

Socket

Page 7: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

1 - N

Socket

SocketSocket

Socket

1

2

3

4

5

*за исключением pub/sub

Page 8: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

REQ & REP Sockets

REQ REP

1

2

1. send

2. receive

1. receive

2. send

Page 9: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

# 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

Page 10: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

PUSH & PULL Sockets

PUSH PULL

send receive

Page 11: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

PUSH PULL

PULL

PULL

PUSH

WORKER

WORKER

WORKER

PUSH

PUSH

PULL

Page 12: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

PUB & SUB Sockets

SUB

SUBPUB

SUB

1

1

2

2

1 2

Page 13: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

PUSH

PULL

PULL

PULL

PUSH

WORKER

WORKER

WORKER

PUSH

PUSH

PULL

SUB

SUB

SUB

PUB

Page 14: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

ROUTER Socket

REQ

REQ

REQ

ROUTER MESSAGE

MESSAGE

MESSAGE

Page 15: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

DEALER Socket

REP

REP

REP

DEALER

Page 16: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Брокер

ROUTER DEALERREQ

REQ

REQ

REP

REP

REP

Clients Workers

Page 17: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Балансирующий брокер

ROUTER ROUTERREQ

REQ

REQ

REQ

REQ

REQ

Clients Workers

WORKER

QUEUE

Page 18: Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq

Ruby ZeroMQ implementation

github.com/chuckremes/ffi-rzmq

ZeroMQ Website

http://zeromq.org/