% gem install sinatra thin sinatra-contrib
% ruby sinatra-comet.rb
GET
% curl http://localhost:4567/comet/test
=> wait response
then, POST
% curl -d 'data=hello' http://localhost:4567/comet/test
% gem install sinatra thin sinatra-contrib
% ruby sinatra-comet.rb
GET
% curl http://localhost:4567/comet/test
=> wait response
then, POST
% curl -d 'data=hello' http://localhost:4567/comet/test
| #!/usr/bin/env ruby | |
| require 'rubygems' | |
| require 'sinatra' | |
| require 'thin' | |
| require 'sinatra/streaming' | |
| @@comet = Hash.new | |
| post '/comet/:channel' do | |
| channel = params['channel'] | |
| data = params[:data] | |
| @@comet[channel] = data | |
| data | |
| end | |
| get '/comet/:channel' do | |
| channel = params['channel'] | |
| stream do |s| | |
| data = nil | |
| loop do | |
| break if (data = @@comet.delete channel) | |
| sleep 1 | |
| end | |
| s.write data | |
| s.flush | |
| end | |
| end |