20
ElixirでCowboyを 使ってみる

Cowboyとelixir

Embed Size (px)

Citation preview

Page 1: Cowboyとelixir

ElixirでCowboyを 使ってみる

Page 2: Cowboyとelixir

自己紹介名前:橘田 隼一 TwitterID:hayabusa333 興味:カーネル、GC、Erlang、Elixir お仕事:派遣ウェッブプログラマ 所属:Joel教、翔鶴瑞鶴仲良し姉妹同盟

Page 3: Cowboyとelixir

やっていること・ElixirChanges - Elixirの日々の変更点まとめ ・PhoenixChanges - Phoenixの日々の変更点まとめ ・週刊Elixirライブラリ - Elixirのライブラリの紹介 ・CowboyのUserGuideの翻訳 - Coboyのことはじめ記事翻訳

Page 4: Cowboyとelixir

Cowboyとは・Erlangで書かれた高速なモジュラー形式のHTTPサーバ ・HTTP1.1/Websocke 対応 ・ErlangVMで動かすHTTPサーバだとCowboyが一強 ・Plugを使えば、もっと簡単にできるけど、今日は直接さわるよー

Page 5: Cowboyとelixir

Cowboyで静的ページを表示

http://d.hatena.ne.jp/hayabusa333/20150813/cowboy_elixir_static_pages

Page 6: Cowboyとelixir

新規プロジェクトを作成$ mix new static_hello_world ̶sup

# mix new Elixirの新規プロジェクトを作成します # ̶sup をつけることによって supervision treeを含んだOTPアプリケーションで作成されます # 通常のmix newではsupervisorがない状態なので注意が必要です

Page 7: Cowboyとelixir

mix.exsを記載def application do [applications: [:logger, :cowboy, :ranch], mod: {StaticHelloWorld, []}] end # mod: {StaticHelloWorld, []} にてアプリケーションのコールバックモジュールとして指定してます # StaticHelloWorldはsupervison treeとして起動します

defp deps do [{ :cowboy, "1.0.0" }] end

Page 8: Cowboyとelixir

supervisor.exを記載defmodule StaticHelloWorld.Supervisor do use Supervisor # supervisiorモジュールを起動するため def start_link(_) do {:ok, sup} = Supervisor.start_link(__MODULE__, [], name: :supervisor) end # supervisorモジュールを起動する際に init/1 を渡す必要がある def init(_) do processes = [] # one_for_oneは自分自身がダメになったら他人に影響されず # 自分自身を再起動するという戦略です。 {:ok, {{:one_for_one, 10, 10}, processes}} end end

Page 9: Cowboyとelixir

static_hello_world.exを記載defmodule StaticHelloWorld do def start(_type, _args) do dispatch = :cowboy_router.compile([ { :_, [ # http://localhost:8080/ でアクセスされた場合はstatic_hello_world を使うと指定 {"/", :cowboy_static, {:priv_file, :static_hello_world, “index.html"}} ] } ]) # http通信にて使用する起動環境を設定します { :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env, [{:dispatch, dispatch}]}]) end end

Page 10: Cowboyとelixir

priv/index.html を記載

適当に静的ページを記載

Page 11: Cowboyとelixir

Cowboyを起動

$ mix deps.get $ mix run --no-halt

Page 12: Cowboyとelixir

デモ

Page 13: Cowboyとelixir

Cowboyで動的ページを表示

Page 14: Cowboyとelixir

新規プロジェクト作成から supervisor.exを記載までは ほぼ同じなためカット

Page 15: Cowboyとelixir

dynamic_hello_world.exを記載defmodule DynamicHelloWorld do def start(_type, _args) do dispatch = :cowboy_router.compile([ { :_, [ {"/", DynamicPageHandler, []} ]} ]) { :ok, _ } = :cowboy.start_http(:http, 100, [{:port, 8080}], [{ :env, [{:dispatch, dispatch}]}] )

end end

Page 16: Cowboyとelixir

dynamic_page_handler.exを記載defmodule DynamicPageHandler do def init(_type, req, []) do {:ok, req, :no_state} end

def handle(request, state) do # Http通信にて返信する内容を自作する dynamic = “Dynamic" { :ok, reply } = :cowboy_req.reply( 200, [{"content-type", "text/html"}], "#{dynamic} Hello World", request) {:ok, reply, state} end

def terminate(reason, request, state) do :ok end end

Page 17: Cowboyとelixir

デモ

Page 18: Cowboyとelixir

ソースコード

https://github.com/hayabusa333/cowboy-elixir-example

Page 19: Cowboyとelixir

今後・動的ページを表示する方法をまとめる ・COOKIE情報を送信する方法を記載 ・WebSocket通信を行う方法を記載 ・HTTP2に対応したら記事を記載

Page 20: Cowboyとelixir

ご静聴ありがとうございました