読者です 読者をやめる 読者になる 読者になる

zmq の python binding で echo テスト

zeromq python

ZMQ は非同期が売りですが、まずは同期で書いてみます。

とりあえず書くと言えば Echo サーバ、ということで書いてみました。

REP 側は pyzmq のサンプルにあったコードそのままです。

REQ 側

zmq.REQ で Connect します。ポイントは REP 側を先に起動しておくというところでしょうか。

import zmq

ctx = zmq.Context()
sock = ctx.socket(zmq.REQ)
sock.connect('tcp://127.0.0.1:5555')

sock.send('hello')
print sock.recv()

値が返ってきたら画面に表示して終了です。

REP 側

ioloop という zmq の機能を使います。応答があった場合通知してくれる POLLIN を使います。

import zmq
from zmq.eventloop import ioloop

loop = ioloop.IOLoop.instance()

ctx = zmq.Context()
sock = ctx.socket(zmq.REP)
sock.bind('tcp://127.0.0.1:5555')

def rep_handler(sock, events):
  msg = sock.recv()
  sock.send(msg)

loop.add_handler(sock, rep_handler, zmq.POLLIN)

loop.start()

先にこちらを起動して recv ブロック状態にします。

実行してみる

$ python rep.py

$ python req.py
hello

hello と表示されたらうまいこと通信成功です。

pub/sub や push/pull を試してみようと思います。