Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cowboyとelixir

2,791 views

Published on

Shibuya.ex #1 で発表した LT資料です

Published in: Technology
  • Be the first to comment

Cowboyとelixir

  1. 1. ElixirでCowboyを 使ってみる
  2. 2. 自己紹介 名前:橘田 隼一 TwitterID:hayabusa333 興味:カーネル、GC、Erlang、Elixir お仕事:派遣ウェッブプログラマ 所属:Joel教、翔鶴瑞鶴仲良し姉妹同盟
  3. 3. やっていること ・ElixirChanges - Elixirの日々の変更点まとめ ・PhoenixChanges - Phoenixの日々の変更点まとめ ・週刊Elixirライブラリ - Elixirのライブラリの紹介 ・CowboyのUserGuideの翻訳 - Coboyのことはじめ記事翻訳
  4. 4. Cowboyとは ・Erlangで書かれた高速なモジュラー 形式のHTTPサーバ ・HTTP1.1/Websocke 対応 ・ErlangVMで動かすHTTPサーバだ とCowboyが一強 ・Plugを使えば、もっと簡単にでき るけど、今日は直接さわるよー
  5. 5. Cowboyで静的ページを表示 http://d.hatena.ne.jp/hayabusa333/20150813/cowboy_elixir_static_pages
  6. 6. 新規プロジェクトを作成 $ mix new static_hello_world ̶sup # mix new Elixirの新規プロジェクトを作成します # ̶sup をつけることによって supervision treeを含んだ OTPアプリケーションで作成されます # 通常のmix newではsupervisorがない状態なので注意が 必要です
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. priv/index.html を記載 適当に静的ページを記載
  11. 11. Cowboyを起動 $ mix deps.get $ mix run --no-halt
  12. 12. デモ
  13. 13. Cowboyで動的ページを表示
  14. 14. 新規プロジェクト作成から supervisor.exを記載までは ほぼ同じなためカット
  15. 15. 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
  16. 16. 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
  17. 17. デモ
  18. 18. ソースコード https://github.com/hayabusa333/cowboy-elixir-example
  19. 19. 今後 ・動的ページを表示する方法をまとめる ・COOKIE情報を送信する方法を記載 ・WebSocket通信を行う方法を記載 ・HTTP2に対応したら記事を記載
  20. 20. ご静聴ありがとうございました

×