Slide 1

Slide 1 text

What’s the fuss about Phoenix? @sasajuric
 aircloak.com

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

productivity simplicity maintainability interoperability fault-tolerance scalability

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

run different "things" separately

Slide 9

Slide 9 text

scheduler scheduler scheduler scheduler CPU CPU CPU CPU Erlang VM

Slide 10

Slide 10 text

Node 1 Node 2 Node 3

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

DEMO

Slide 14

Slide 14 text

conn conn your code

Slide 15

Slide 15 text

conn conn plug

Slide 16

Slide 16 text

conn log conn handle authenticate authorize fetch session

Slide 17

Slide 17 text

endpoint conn conn router controller

Slide 18

Slide 18 text

endpoint conn conn router controller endpoint conn conn router controller endpoint conn conn router controller

Slide 19

Slide 19 text

CODE

Slide 20

Slide 20 text

client server socket

Slide 21

Slide 21 text

client server

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

socket client channel channel socket client channel channel

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

conference program chat

Slide 33

Slide 33 text

conference program chat ticket purchasing newsletters ratings raffles administration …

Slide 34

Slide 34 text

start simple go far

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

40% off with code ctwwczg
 at manning.com https://joind.in/talk/60946