Sinatra::RocketIO@shokairubyhiroba 2013
私•@shokai (しょうかい)•趣味:料理、glitch
Sinatra::RocketIOとは
Node.jsのSocket.IOみたいなのをSinatraでも使えるプラグイン
仕様•WebSocket & Comet• 自動選択、切れても再接続•C10K• 1プロセスで15000クライアント接続• カッコいいAPI
• Ruby 1.8.7 ~ 2.0.0•Chrome, Safari, IE10,Android, iOS•EventMachine と jQueryが必要• em-websocket + sinatra/streaming• サーバーはthin
Sinatra
require "sinatra"get "/" do"Hello world."end% gem install sinatra
Sinatra::RocketIO
require "sinatra"require "sinatra-rocketio"io = Sinatra::RocketIOio.on :connect do |client|io.push :message, "Hello world....
もう少し詳しく説明します
setup
require sinatrarequire sinatra/rocketiorun Sinatra::Application<script src="/jquery.js"></script><script src="<%= rocketio...
接続できたのでデータをやりとりしたい
on と push
受信登録io.on(“event_name”, callback)送信io.push(“event_name”, data)
Server --(WebSocket/Comet)--> Clientサーバープッシュ
io.on :connect do |client|puts "new client - <#{client.session}>"io.push :chat, {:user => "shokai", :msg => "hello"}endio....
Client --(WebSocket/Ajax)--> Serverクライアントからプッシュ
io.on("connect", function(){io.push("chat", {msg:"Hello!!!", user:"shokai"});});io.on :chat do |data, client|puts client.s...
on(イベント登録)push(送信)サーバー/クライアントで同じように使える
サンプルアプリ
Chat
Ruby+JS 合計40行でチャット作れた
Canvas
家のArduinoを見る
入門方法
•README嫁• https://github.com/shokai/sinatra-rocketio•Hello world• https://github.com/shokai/rocketio-hello-world
クライアントライブラリ
•sinatra/rocketio/client• sinatra-rocketio gemに付属•em-rocketio-client• pure EventMachine実装•rocketio.js• sinatra-rocketio ge...
C10Kクライアントたくさん接続する設定
require "eventmachine"case RUBY_PLATFORMwhen /linux/i then EM.epoll ## for Linuxwhen /bsd/i then EM.kqueue ## for BSDendEM...
今後
•Lindaという並列言語拡張を実装してる• http://shokai.org/blog/archives/7515•Rack::RocketIOにしたい• Rack Hijacking API使いたい• Railsでも使えるようになる•IE...
質問などあれば•@shokai•お気軽に•お声かけください
Upcoming SlideShare
Loading in …5
×

Sinatra::RocketIO - rubyhiroba2013

2,897 views

Published on

Sinatra::RocketIO - WebSocket & Comet plugin for Sinatra

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,897
On SlideShare
0
From Embeds
0
Number of Embeds
415
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Sinatra::RocketIO - rubyhiroba2013

  1. 1. Sinatra::RocketIO@shokairubyhiroba 2013
  2. 2. 私•@shokai (しょうかい)•趣味:料理、glitch
  3. 3. Sinatra::RocketIOとは
  4. 4. Node.jsのSocket.IOみたいなのをSinatraでも使えるプラグイン
  5. 5. 仕様•WebSocket & Comet• 自動選択、切れても再接続•C10K• 1プロセスで15000クライアント接続• カッコいいAPI
  6. 6. • Ruby 1.8.7 ~ 2.0.0•Chrome, Safari, IE10,Android, iOS•EventMachine と jQueryが必要• em-websocket + sinatra/streaming• サーバーはthin
  7. 7. Sinatra
  8. 8. require "sinatra"get "/" do"Hello world."end% gem install sinatra
  9. 9. Sinatra::RocketIO
  10. 10. require "sinatra"require "sinatra-rocketio"io = Sinatra::RocketIOio.on :connect do |client|io.push :message, "Hello world."end% gem install sinatra-rocketio
  11. 11. もう少し詳しく説明します
  12. 12. setup
  13. 13. require sinatrarequire sinatra/rocketiorun Sinatra::Application<script src="/jquery.js"></script><script src="<%= rocketio_js %>"></script>var io = new RocketIO().connect();io = Sinatra::RocketIOServer SideClient Side
  14. 14. 接続できたのでデータをやりとりしたい
  15. 15. on と push
  16. 16. 受信登録io.on(“event_name”, callback)送信io.push(“event_name”, data)
  17. 17. Server --(WebSocket/Comet)--> Clientサーバープッシュ
  18. 18. io.on :connect do |client|puts "new client - <#{client.session}>"io.push :chat, {:user => "shokai", :msg => "hello"}endio.on("chat", function(data){alert(data.user + " : " + data.msg);});Server SideClient Sidepush (送信)on (イベント登録)
  19. 19. Client --(WebSocket/Ajax)--> Serverクライアントからプッシュ
  20. 20. io.on("connect", function(){io.push("chat", {msg:"Hello!!!", user:"shokai"});});io.on :chat do |data, client|puts client.sessionputs "#{data[user]} - #{data[msg]}"endClient SideServer Sidepush (送信)on (イベント登録)
  21. 21. on(イベント登録)push(送信)サーバー/クライアントで同じように使える
  22. 22. サンプルアプリ
  23. 23. Chat
  24. 24. Ruby+JS 合計40行でチャット作れた
  25. 25. Canvas
  26. 26. 家のArduinoを見る
  27. 27. 入門方法
  28. 28. •README嫁• https://github.com/shokai/sinatra-rocketio•Hello world• https://github.com/shokai/rocketio-hello-world
  29. 29. クライアントライブラリ
  30. 30. •sinatra/rocketio/client• sinatra-rocketio gemに付属•em-rocketio-client• pure EventMachine実装•rocketio.js• sinatra-rocketio gemに付属• ブラウザ拡張などにどうぞ
  31. 31. C10Kクライアントたくさん接続する設定
  32. 32. require "eventmachine"case RUBY_PLATFORMwhen /linux/i then EM.epoll ## for Linuxwhen /bsd/i then EM.kqueue ## for BSDendEM.set_descriptor_table_size 20000 ## 20Kconfig.ruhttps://github.com/shokai/sinatra-websocketio/wiki/C10K/etc/security/limits.confshokai        soft        nofile            65536shokai        hard        nofile            65536
  33. 33. 今後
  34. 34. •Lindaという並列言語拡張を実装してる• http://shokai.org/blog/archives/7515•Rack::RocketIOにしたい• Rack Hijacking API使いたい• Railsでも使えるようになる•IE10がcometで落ちる• 誰か助けて
  35. 35. 質問などあれば•@shokai•お気軽に•お声かけください

×