$30 off During Our Annual Pro Sale. View Details »

What's the fuss about Phoenix?

What's the fuss about Phoenix?

WebCamp Zagreb, 2016

Saša Jurić

October 31, 2016
Tweet

More Decks by Saša Jurić

Other Decks in Programming

Transcript

  1. What’s the fuss about
    Phoenix?
    @sasajuric

    aircloak.com

    View Slide

  2. Phoenix web framework
    Elixir programming language
    Erlang VM
    written in
    runs on

    View Slide

  3. productivity
    simplicity
    maintainability
    interoperability
    fault-tolerance
    scalability

    View Slide

  4. Erlang is a programming language used
    to build massively scalable soft real-time
    systems with requirements on high
    availability.
    erlang.org

    View Slide

  5. View Slide

  6. View Slide

  7. separate execution
    no shared memory
    separate garbage collection
    cooperation through communication
    isolated crashes
    detectable crashes of other processes

    View Slide

  8. run different "things" separately

    View Slide

  9. scheduler scheduler scheduler scheduler
    CPU CPU CPU CPU
    Erlang VM

    View Slide

  10. Node 1 Node 2
    Node 3

    View Slide

  11. View Slide

  12. View Slide

  13. DEMO

    View Slide

  14. conn conn
    your code

    View Slide

  15. conn conn
    plug

    View Slide

  16. conn
    log
    conn
    handle
    authenticate
    authorize
    fetch session

    View Slide

  17. endpoint
    conn
    conn
    router
    controller

    View Slide

  18. endpoint
    conn
    conn
    router
    controller
    endpoint
    conn
    conn
    router
    controller
    endpoint
    conn
    conn
    router
    controller

    View Slide

  19. CODE

    View Slide

  20. client server
    socket

    View Slide

  21. client server

    View Slide

  22. client server
    join "lobby"
    send "room:42", "message", payload
    send "room:42", "message", payload
    socket
    send “lobby", "rooms", payload
    join "room:42"

    View Slide

  23. socket
    client
    channel
    channel
    socket
    client
    channel
    channel

    View Slide

  24. import Socket from "phoenix"
    socket = new Socket("/socket")
    socket.connect()
    room = socket.channel("room:elixir", payload)
    room.join()

    View Slide

  25. room.push("some_event", payload)
    room.on("some_event", (payload) => {
    // ...
    })

    View Slide

  26. defmodule MyEndpoint do
    socket "/socket", MySocket
    # ...
    end

    View Slide

  27. defmodule MySocket do
    use Phoenix.Socket
    transport :websocket, Phoenix.Transports.WebSocket
    transport :longpoll, Phoenix.Transports.LongPoll
    channel "lobby", LobbyChannel
    channel "room:*", RoomChannel
    # ...
    end

    View Slide

  28. defmodule RoomChannel do
    use Phoenix.Channel
    def join(topic, payload, socket) do
    # ...
    end
    def handle_in(event, payload, socket) do
    # ...
    end
    def handle_info(erlang_message, socket) do
    # ...
    end
    end

    View Slide

  29. push(socket, event, payload)
    broadcast(socket, event, payload)
    broadcast_from(socket, event, payload)

    View Slide

  30. on_some_ui_event(() =>
    channel.push("user_message", payload))
    channel.on("user_message", (payload) =>
    render(payload))

    View Slide

  31. defmodule RoomChannel do
    # ...
    def handle_in(event, payload, socket) do
    broadcast(socket, event, payload)
    # ...
    end
    # ...
    end

    View Slide

  32. conference program
    chat

    View Slide

  33. conference program
    chat
    ticket purchasing
    newsletters
    ratings
    raffles
    administration

    View Slide

  34. start simple
    go far

    View Slide

  35. onboarding
    - getting started guides
    - Elixir
    - Phoenix
    - elixirforum.com

    View Slide

  36. 40% off with code ctwwczg

    at manning.com
    https://joind.in/talk/60946

    View Slide