memcachedプロトコルを使ったBlockingQueue
マルチスレッドプログラミングでよく使うBlockingQueueをmemcachedプロトコルを使ってネットワーク越しに使うことができるサーバーを実装してみました。
タスクをガンガンpushしていく一方で、ワーカースレッドならぬワーカーサーバーが1つずつpopして処理していくような分散処理に使えるかも知れません。スレッドプールのネットワーク分散版。
ソースコードはCodeReposにあります:lang/ruby/lkserver
$ svn co http://svn.coderepos.org/share/lang/ruby/lkserver $ cd lkserver # memcachedテキストプロトコルのパーサーをコンパイル $ ruby extconf.rb $ make # Rev(イベント駆動IOライブラリ)をインストール $ gem install rev # 11511/tcpで起動 $ ruby lkqueue.rb 11511
使い方
- blocking pop
- memcachedのgetコマンドでblocking popができます。keyは無視されますが何か指定してください。1つも値が入っていないときは、何かsetされるまでブロックします。
- push
- memcachedのsetコマンドでpushができます。