Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
realtime_rails
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mgi166
September 25, 2015
Programming
60
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
realtime_rails
mgi166
September 25, 2015
More Decks by mgi166
See All by mgi166
Gunosy のログ収集基盤
mgi166
2
730
Music as Code
mgi166
0
710
Other Decks in Programming
See All in Programming
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
490
AHC070解法紹介
eijirou
0
140
Java 27新機能 / Java 27 new features
kishida
2
180
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
190
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
300
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
590
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
280
App Intentsのビルドプロセスを支える技術
kntkymt
0
460
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
570
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
160
新卒PdEのリアル
ryu1013
1
520
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
250
Become a Pro
speakerdeck
PRO
31
6.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
Google's AI Overviews - The New Search
badams
0
1.6k
Building an army of robots
kneath
307
46k
エンジニアに許された特別な時間の終わり
watany
109
250k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
Building the Perfect Custom Keyboard
takai
2
890
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Making Projects Easy
brettharned
120
6.8k
Transcript
Realtime Rails mgi
࠷ۙͷ Web ք۾
React.js
scala
Elixir
golang
ΈΜͳ Rails Ͳ͏ͨ͠ : චऀ rails ͔͠ೝΊͳ͍ ͱݴ͍ͬͯΔͷͰ͋Γ·ͤΜ
ײ(ٴͼউखͳਪଌ) • ݴޠʹΑΓಘҙෆಘҙ͋ΔʹͤΑɺόοΫΤ ϯυͷબࢶ͕૿͍͑ͯΔ • rails Ͱ͔͠ग़དྷͳ͍͜ͱ͕ݮ͖ͬͯͨ(ͱ͍͏ ͔ࠓ࣌ͦΜͳͷ͋Δʁ)
Ͱ͑ͯ rails Λ औΓ্͛ͯΈͨ
ཧ༝ • ҰԠࣄʹ݁͢Δ • rails Λ͕͔ΓʹɺଞʹͰ͖Δ͜ͱΛ୳͢ͱɺ एׯֶशίετ͕͑ΒΕΔ • ظͷ •
खΛग़͠·͘Δͱ͍࣌ؒ͘Β͋ͬͯΓͳ ͍
ͱ͍͏Θ͚Ͱ…
ຊ
Realtime Rails • WebSocket ͷ֓ཁ • ͲΜͳࣄ͕Ͱ͖Δͷ͔ • WebSocket +
Rails ͷαϯϓϧίʔυ • actioncable (websocket-rails গ͠) • ՝ʹͳΓͦ͏ͳ
WebSocket
WebSocket ͱ • αʔόʔͱϒϥβؒͰϦΞϧλΠϜͰใ ΛΓͱΓ͢Δن֨ͷ͜ͱ • chat, online game, push
௨ • ࠷ۙͷϒϥβطʹ࣮ࡁΈ • αʔόʔଆͷ༻ҙΛ͢Εɺ࣮ݱՄೳ
Ξ̋ʔό̋ά
Aͷϒϥβ Bͷϒϥβ ͬͪ͜Ͱ Ұॹʹಈ͍ͯཉ͍͠ ͬͪ͜ͰΩϟϥΛ ಈ͔ͨ͠Β
WebSocket ͱ • server ʹ request ͯ͠ response Λฦ͢ɺͱ͍͏ http
ͷن֨Ͱ࣮ݱͰ͖ͳ͍ • αʔόʔͱϒϥβؒͰৗʹใΛΓͱΓ͠ଓ ͚Δ • ϒϥβͰೖྗͨ͠࠲ඪΛαʔόʔଆʹ • αʔόʔଆʹͬͨ࠲ඪΛϒϥβʹ
WebSocket ք۾ͷྺ࢙ • node.js ͕͍͢͝Β͍͠ (2013 ࠒ) • node.js ʹΑΔ
c10k ͷղফ • socket.io • http://socket.io/demos/weplay/ • ϒϥβ͕ websocket ରԠ࢝͠ΊΔɻnginx • ←ࠓίίʂ
ͿͬͪΌ͚ gem ͕͋Δ • websocket-rails • https://github.com/websocket-rails/ websocket-rails • Standalone
Server Mode • websocket ༻ͷαʔόʔΛཱͯͯ͘Ε Δ
ͿͬͪΌ͚ rails ରԠ͢Δ • rails5 ͷ ActionCable • rails +
WebSocket Λͬͯ͘ΕΔ • https://github.com/rails/actioncable • websocket-rails ͱͷҧ͍αʔόʔ • websocket-rails: thin, actioncable: ͳΜͰ
Sample (ແه໊νϟοτΞϓϦ)
WebSocket ͷΈ
͓͞Β͍ • websocket-rails Ͱطଘͷ rails ϓϩδΣΫτ ʹָʹಋೖՄೳ • rails5 ͔Β
websocket σϑΥϧτͰ͑Δ
XFCTPDLFU TFSWFS 4. Push change to users 1. Create new
message 2. Publish changes to Redis 3. Publish change to subscribers
var dispatcher = new WebSocketRails('localhost:3001/websocket'); var CommentForm = React.createClass({ onSubmit:
function(e) { e.preventDefault(); dispatcher.trigger('new_message', { text: text }); this.props.createMessage({ text: text }); }, render: function() { return ( <form className="comment-form" onSubmit={this.onSubmit}> <textarea placeholder="write something..." ref="text"/> <input type="submit" value="submit" /> </form> ); } }); WebSocket ʹΠϕϯτΛ௨ WebSocket Ͱαʔόʔଆ ʹ௨͢Δ Rails ͷ api Λ ajax Ͱୟ͘
# config/events.rb WebsocketRails::EventMap.describe do subscribe :new_message, to: BroadcastController, with_method: :new_message
end # app/controllers/broadcast_controller.rb class BroadcastController < WebsocketRails::BaseController def new_message WebsocketRails[:chat_channel].trigger(:new_message, message) end end WebSocket ͷ controller Event ໊ͱ controller Λهड़ (routing) :chat_channel ͱ͍͏νϟωϧʹରͯ͠ broadcast ͢Δ
var dispatcher = new WebSocketRails('localhost:3001/websocket'); var channel = dispatcher.subscribe(‘chat_channel’); var
Contents = React.createClass({ componentDidMount: function() { channel.bind('new_message', function(message){ var messages = this.state.messages; messages.unshift(message); this.setState({ messages: messages }) }.bind(this)); }, render: function() { return ( <div class=“content"> … </div> ); } ௨͕͖ͨΒɺDOM ʹө :chat_channel ͱ͍͏ νϟωϧΛ js ଆͰߪಡ νϟωϧʹ௨͕དྷͨΒ callback ͕ݺΕͯ state Λߋ৽
՝ʹͳΓͦ͏ͳͱ͜Ζ
• rails (≒ ruby ) Ͱ͍͍ͷ͔ • εέʔϥϏϦςΟ
rails (≒ ruby)Ͱ͍͍ͷ͔ • Γ͍ͨ͜ͱ(Ϗδωε)ʹΑΔ • ࠓͷձࣾ WebSocket ͷधཁߴ͘ͳ͍ •
ձࣾͷϦιʔεʹΑΔ • rails ΤϯδχΞଟ͍
rails (websocket-rails actioncable) ͷϙΠϯτ • EventMachine Λ৴༻͢Δ͔Ͳ͏͔ • Thin
EventMachine Ͱ࣮͞ΕͯΔ • puma EventMachine ʹͪΐͬͱґଘͯ͠Δ • ࠇ͍͔ᷚΓࣖʹͯ͠طʹک͑ͯΔ • actioncable ͳΒαʔόʔͷىಈΛࣗ༝ʹఆٛͰ͖Δɺ ॊೈੑ͕ߴ͍ҹΛड͚ͨ
node.js ͷϙΠϯτ • ϒϥβ͕ websocket ʹରԠ͍ͯ͠Δ͔ͷ ఆ(socket.io ͩͱͬͯ͘ΕΔΒ͍͠) • Ϛϧνϓϩηε
cluster ͑Մೳ
εέʔϥϏϦςΟ • EventMachine ͰͲ͜·Ͱεέʔϧ͢Δ͔ • 1000 ίωΫγϣϯ͔Βਏ͘ͳΔͱ͍͏ᷚ • puma Θ͔ΒΜ
• rails ͔ΒΓସ͑Δͱεέʔϧ͠·ͨ͠ɺͱ͍͏Α͘ฉ͘ • http://www.infoq.com/jp/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn • http://www.infoq.com/jp/news/2014/01/paypal-java-javascript • http://www.infoq.com/jp/news/2015/07/parse-moved-ruby-go
WebSocket server ૿͑ͯΔ • node.js(javascript) • websocket(go) • https://godoc.org/golang.org/x/net/websocket •
phonix(Elixir) • http://www.phoenixframework.org/v0.17.0/ docs/channels
ఆ݁ • ͋ΔఔͷଓΛࡹ͘ϦΞϧλΠϜ web ͕ඞཁͳ Βɺrails Ҏ֎Λݕ౼ͨ͠΄͏͕͍͍͔ • WebSocket server
૿͖͍͑ͯͯΔͷͰɺબࢶ๛ ɻͲ͏Δ͔ॊೈʹબ͢Δ • rails Ҏ֎ͩͱ phoenix ג • actioncable ͳΒ͖ͬͱεέʔϧͯ͘͠ΕΔ…!
૯ׅ
ࠓճͷൃදͷ·ͱΊ • WebSocket ʹ͍ͭͯઆ໌͠·ͨ͠ • Rails + WebSocket ͷαϯϓϧΛ࡞ͬͯղઆ͠ ·ͨ͠
• rails Λ͏͜ͱͷ՝Λߟ͑·ͨ͠
͓ΘΓ