【スクリプトメモ】rubyで別スレッドが更新している情報を返すWebサーバを作ったよ。
自分用メモでタイトルまんまです。
概要として
- あるスレッドは一定間隔でとあるサーバの情報を取得し、その情報を内部で保存する動作を繰り返す。
- その情報をクライアント側がアクセス出来るようにWebサーバとして動作させる。
ぶっちゃけWebサーバ部分のソースは
http://jampin.blog20.fc2.com/blog-entry-112.html
さんの情報まんまです・・・。
スレッド部分は以前書いた
スクリプトメモ:rubyでデーモン作ったよ。と
http://www.namaraii.com/rubytips/?%A5%B9%A5%EC%A5%C3%A5%C9
を参照してスレッド化しました。
で、実際の内容は
#!/opt/ruby-1.9.2/bin/ruby require 'rubygems' require 'net/http' require 'webrick' class FileGet data_get = Thread.new do http = Net::HTTP.new("example.com", 80) req = Net::HTTP::Get.new('/hogehoge.txt') while true res = http.request(req) $body = res.body sleep(0.5) end end end class Test < WEBrick::HTTPServlet::AbstractServlet def do_GET(req, resp) resp.body = $body raise WEBrick::HTTPStatus::OK end def do_POST(req, resp) resp.body = "ServletA receive Post request with params (name => #{req.query['name']})" raise WEBrick::HTTPStatus::OK end end Response = WEBrick::HTTPServer.new( :Port => 10080, :DocumentRoot => '~/public_html/' ) Response.mount('/test', Test) trap("INT"){RateResponse.shutdown} RateResponse.start
という感じに。面倒くさかったのでスレッドが取得している情報は、プークスクスのグローバル変数叩き込みです。
これをtest.rbみたいな適当な名前付けて
ruby test.rb
で実行すれば動くはず。