@m_seki の

I like ruby tooから引っ越し

@masui さんのWeb版Rinda(サブセット)に関するメモ

増井さんのネタ。
Web版ということで、大きなデータの交換よりもイベント通知が主な利用目的だろうと考え、仕様を次のように絞りました。

  • 扱えるタプルは文字列のみ。Hashタプルに限定する。
  • タプルはURLのquery_stringで表現する。
  • 変数名のみで値がないときはワイルドカードとする。(つまりnil)
  • 操作はwrite/take/readのみ。
  • タプルは24時間で消滅する。
  • read/takeは10分でタイムアウトする。

現在druby.orgで動かしています(が再起動の仕組み入れてないのでバグ等でダウンしても復活できない)。

require 'open-uri'

# 二行が同じ意味 (write)
open('http://www.druby.org/cgi-bin/rinda/write?toRuby=78&from=seki')
ts.write({'toRuby' => '78', 'from' => 'seki'}, 24 * 60 * 60)

# 二行が同じ意味 (read, take) URLの read を take に替えても動きます。
open('http://www.druby.org/cgi-bin/rinda/read?toRuby&from=seki') {|f|
  puts f.read # => 'toRuby=78&from=seki'
}
ts.read({'toRuby' => nil, 'from' => 'seki'}, 60)

Hashタプルは見た目と反して、要素数が一致しないとマッチしないので注意です。

もっといいインターフェイスがあると思います。私が直しても良いのですが、増井さんが自分で改造しちゃったほうが早い気がします。

追記

つまんないのでタイムアウト時間調整した。