Slide 1

Slide 1 text

Phoenix Channels junichi kuriyama(@astapi) 2016.08.31 tokyo.ex#5

Slide 2

Slide 2 text

• junichi kuriyama(@astapi) • ॴଐ • ݩ ͳձࣾ • ࢓ࣄͰ͸Rubyͨ͠ΓElixirͨ͠ΓΠϯϑϥ(AWS)ͯ͠·͢ • ٳ೔͸Erlangͨ͠ΓElixirͨ͠Γͯ͠·͢

Slide 3

Slide 3 text

࿩͢಺༰ • Phoenix ͷ Channels ͱ͍͏ػೳͷ঺հ • ࠾༻ࣄྫ

Slide 4

Slide 4 text

channels ͱ͸ʁ

Slide 5

Slide 5 text

WebSocket Ͱେมͳͱ͜Ζ Λ৭ʑ΍ͬͯ͘ΕΔ΍ͭ

Slide 6

Slide 6 text

• ઀ଓपΓ • connection؅ཧ • pubsub • broadcast௨৴

Slide 7

Slide 7 text

ϦΞϧλΠϜͳ૒ํ޲௨৴Λ ͍͍ײ͡ʹ΍ΕΔ΍ͭ

Slide 8

Slide 8 text

େ͖͘3module͋Δ ※ݸਓͷײ૝Ͱ͢

Slide 9

Slide 9 text

• Transports • Channel • PubSub

Slide 10

Slide 10 text

Transports • cowboy < - > channel ( message dispatch) • encode & decode • phoenix message < -> json • WebSocket & LongPolling ( fall back )

Slide 11

Slide 11 text

Channel • GenServer • controllerతͳ • transport < - > channel • transport͕ݺͿɺcall back ϝιουͷ࣮૷ • Rest API ײ֮ͰϩδοΫʹूதͰ͖Δ

Slide 12

Slide 12 text

xxx_channel.ex def handle_in(“new_msg”, %{“uid” => uid, “body” => body}, socket) do broadcast! socket, “new_msg”, %{uid: uid, body: body} {:noreply, socket} end def handle_in(“create:post”, attrs, socket) do changes = Post.changeset(%Post{}, attrs) if changeset.valid? do Repo.insert!(changeset) {:reply, :ok, socket} else {:reply, :error, socket} end end

Slide 13

Slide 13 text

PubSub • publish - subscribe • connection process ؅ཧ ( ets ) • pubsub backend • Pg2 ( default) • Redis • RabbitMQ • Postgres

Slide 14

Slide 14 text

ࢀߟจݙ Elixir Slack (#phoenix)

Slide 15

Slide 15 text

࠾༻ࣄྫ

Slide 16

Slide 16 text

࠾༻ࣄྫ

Slide 17

Slide 17 text

ৄ͘͠͸ͪ͜Β http://logmi.jp/155707

Slide 18

Slide 18 text

Կ͔Λ͢Δ - ౤ߘ? - profileߋ৽? phoenix server Կ͔͋ͬͨΑɻ ͱɺwebsocketʹ ઀ଓ͍ͯ͠Δ Ϣʔβʔʹ௨஌

Slide 19

Slide 19 text

·ͱΊ

Slide 20

Slide 20 text

• channels͸websocketΛ͍͍ײ͡ʹ࢖͑ Δ΍ͭ • channels͸େ͖͘ɺtransports, channel, pubsub ͷ3ͭ • channel ͷ࣮૷ʹʢ΄΅ʣूதͰ͖Δ

Slide 21

Slide 21 text

we are hiring @ • Phoenix ͷ Channels ͱ͍͏ػೳͷ঺հ