zeromq 調査 その3: N:M 双方向通信をためす
今回の調査内容
- 前回試した「Getting the Message Out」は片方向通信だったので双方向通信を確認する
- 前回サンプル => http://zguide.zeromq.org/chapter:all#toc7
- 「A Request-Reply Broker」「Built-in Devices」のサンプルが目的に近そうなので調査
- http://zguide.zeromq.org/chapter:all#toc32
環境
- とりあえず、1 Server内のTCP通信で動作確認
コード
- https://github.com/tanarky/sample-codes/tree/master/php/zmq/broker/
- s1.php(server process)を2つ起動して、c1.php(1つのclient process)から10回メッセージを送った
- 2つのs1.phpにリクエストが分散された
- 1つのs1.phpプロセスを落としたら、起動しているs1.phpプロセスにのみ振られた
問題
- 2つのserver processのうち、1つは処理に3秒以上かかるようにsleepを入れた
- 1回だけ遅いserver processに振られ残りは処理が早いserver processにリクエストが振られる、という挙動を期待
- 結果としては、期待した挙動にならず
- 2つのserver processに均等にリクエストが振られた
- 対応策はあるか? => ありそう
- http://zguide.zeromq.org/chapter:all#toc45
- 「Least-Recently Used Routing」のサンプルは、期待した挙動をしそう
- Cのサンプルを動かして動作確認できた
- PHPに移植中
- clientから、$sock->setSockOpt(ZMQ::SOCKOPT_IDENTITY, str_repeat("a", 300))、といった感じで使う
次回TODO
- 性能評価
その他メモ
- ruby bindingはpollがなく、古い