侘び茶
侘び茶は IRCサーバと一体になった Web Chat です。
http://irc.shinh.dyndns.org/hoge と irc.shinh.dyndns.org の 6667 のチャンネル #hoge が相互接続しています。 Assam & 紅茶よりもよりシームレスにやりとりができるように…という意図です。例のごとく Comet なのでブラウザ側から見てもリアルタイムで更新されるはずです。もし接続切れたら適当にリロードして下さい。
激しく未完成です。完成させるためにやるべきことが多すぎるのがやる気なくなった理由です。
構成は、 Web サーバは Webrick で、 Gonzui::XMLFormatter を使ってます。 IRC 側は rail 使おうかと思ったけど難しそうだったので Net::Socket で自分で作りました。 Comet 的な処理は、 CGI の場合はシグナル飛ばしたりと、なかなかアレな実装でしたが、今回はサーブレットなので、
def wait @q = Queue.new @q.pop end def unlock @q.push(:unlock) if @q end
というような関数を作って、つなぎっぱなしになる方の接続が来たら、 Queue#pop で更新待ちをして、なんか発言があったら別スレッドから Queue#push で pop を終了させ、 pop で復活した方のスレッドはレスポンス返す、というような流れになってます。