ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Aug 24

[StreamingAPI][Ruby]ストリーミングREST APIをrubyで作ってみる

by zuqqhi2 at 2014年8月24日
Pocket

概要

Rubyのrack-streamライブラリで
Streaming APIを作成してみる。

環境

OS

Linux www4322gi 3.2.0-64-generic #97-Ubuntu SMP Wed Jun 4 22:04:21 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Ruby

rbenv(ruby version : ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux])

コード

基本的にはrack-streamのgithubにのっているソースコードをそのまま動かしただけの内容。

Gemfile

rack-streamとWebサーバとしてthinを利用する。

source 'https://rubygems.org'

gem 'thin'
gem 'rack-stream'

config.ru

#  bundle exec thin start -R config.ru -p 9292
# config.ru
# run with `thin start -p 9292`
require 'rack/stream'

class App
  include Rack::Stream::DSL

  stream do
    after_open do
      count = 0
      @timer = EM.add_periodic_timer(1) do
        if count != 3
          chunk "chunky #{count}\n"
          count += 1
        else
          # Connection isn't closed until #close is called.
          # Useful if you're building a firehose API
          close
        end
      end
    end

    before_close do
      @timer.cancel
      chunk "monkey!\n"
    end

    [200, {'Content-Type' => 'text/plain'}, []]
  end
end

app = Rack::Builder.app do
  use Rack::Stream
  run App.new
end

run app

実行結果

# Server
$ bundle exec thin start -R config.ru -p 9292
Thin web server (v1.6.2 codename Doc Brown)
Maximum connections set to 1024
Listening on 0.0.0.0:9292, CTRL+C to stop

# Client
curl http://localhost:9292
chunky 0
chunky 1
chunky 2
monkey!

Github Repository

https://github.com/zuqqhi2/streamingapi

Related Posts

Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.