memcachedプロトコルを使った非同期通知サーバー

  1. アプリケーションA:keyXをgetする
  2. アプリケーションA:getが待たされる
  3. アプリケーションB:keyXにvalueXをセットする
  4. アプリケーションA:getが帰り、valueXを取得できる

このように非同期に通知する機構をmemcachedプロトコルを使って汎用的に利用することができます。

インストール

ソースコード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 lkserver.rb 11511

使い方

通知を待つ
memcachedのgetコマンドで通知待ちができます。keyがsetされるまでブロックします。get_multiには対応していません。
通知する
memcachedのsetコマンドで値を通知できます。flagsとexpire timeは必ず0にしてください。
通知待ちを中断させる
memcachedのdeleteコマンドで通知待ちを中断できます。expire timeは必ず0にしてください。