zeromq 調査 その3: N:M 双方向通信をためす

今回の調査内容

環境

  • とりあえず、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がなく、古い