Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ActionCable vs. Socket.io at ConFoo

Ray Hightower
December 07, 2016

ActionCable vs. Socket.io at ConFoo

How do you achieve real time, bi-directional, event-based communications in your apps? The Socket.io library is tested and true. ActionCable, new with Ruby on Rails version 5, is a challenger. Which solution is better, and why?

This presentation compares Socket.io and ActionCable (included w/Ruby on Rails version 5).

Ray Hightower

December 07, 2016
Tweet

More Decks by Ray Hightower

Other Decks in Technology

Transcript

  1. ActionCable
    vs. Socket.io
    @RayHightower
    ConFoo - Dec 5-7, 2016
    Vancouver, BC
    Canada

    View Slide

  2. What? Why?
    Examples.
    Comparison.

    View Slide

  3. ActionCable is…
    •Real time.
    •Full duplex.
    •Event based.

    View Slide

  4. Half Duplex
    Walkie-Talkie
    Full Duplex
    Phone

    View Slide

  5. HTTP is
    stateless.

    View Slide

  6. View Slide

  7. https://xkcd.com/869/

    View Slide

  8. WebSocket
    Protocol

    View Slide

  9. REmote
    DIctionary
    Server

    View Slide

  10. In-memory
    Key-value store
    Dictionary
    Hash
    {

    View Slide

  11. pub/sub

    View Slide

  12. View Slide

  13. Channels: Clients
    Rooms: Server

    View Slide

  14. Create the app.

    View Slide

  15. View Slide

  16. Generate the
    rooms controller.

    View Slide

  17. View Slide

  18. Generate the
    channel.

    View Slide

  19. View Slide

  20. Create a home for
    the messages in
    the database.

    View Slide

  21. View Slide

  22. Remember the
    migration!

    View Slide

  23. View Slide

  24. 1 Rails.application.routes.draw do
    2 get 'rooms/show'
    3
    4 end
    1 Rails.application.routes.draw do
    2 root to: ‘rooms#show'
    3
    4 end
    config/routes.rb (before & after)

    View Slide

  25. 1 class RoomsController < ApplicationController
    2 def show
    3 @messages = Message.all
    4 end
    5 end
    app/controllers/rooms_controller.rb (before & after)
    1 class RoomsController < ApplicationController
    2 def show
    3 end
    4 end

    View Slide

  26. app/channels/rooms_channel.rb
    1 # Be sure to restart your server when you modify…
    2 class RoomChannel < ApplicationCable::Channel
    3 def subscribed
    4 # stream_from "some_channel"
    5 end
    6
    7 def unsubscribed
    8 # Any cleanup needed when channel is unsubscribed
    9 end
    10
    11 def speak
    12 end
    13 end

    View Slide

  27. View Slide

  28. The Remarkable Journey
    of a Single Web Request
    by Aaron Kalin
    https://windycityrails.com/videos/2015/#9

    View Slide

  29. View Slide

  30. Another chat app?

    View Slide

  31. Gartner Hype Cycle
    Image by Jeremy Kemp
    https://commons.wikimedia.org/wiki/File:Gartner_Hype_Cycle.svg

    View Slide

  32. Gartner Hype Cycle
    ActionCable
    Slope of Enlightenment?

    View Slide

  33. View Slide

  34. View Slide

  35. +

    View Slide

  36. WebSockets
    and
    Robotics

    View Slide

  37. Remotely
    Operated
    Vehicle

    View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. Browser
    BeagleBone Black
    Arduino
    Socket.io
    Serial
    Node.js
    Chrome C++

    View Slide

  50. Browser
    BeagleBone Black
    Arduino
    ActionCable
    Serial
    Ruby
    Chrome C++

    View Slide

  51. Comparison

    View Slide

  52. •ActionCable is…
    •Socket.io is…

    View Slide

  53. YACA
    OpenROV
    vs.

    View Slide

  54. Fitness for a
    particular
    purpose.

    View Slide

  55. Thanks!
    RayHightower.com

    View Slide