Mochiweb LT

Embed Size (px)

Citation preview

  • mochiweb(cooldaemon) / Zero Co. Ltd.

    2008/06/17

    Erlang LT

    1

  • 2

  • Erlang 11

    2

  • Erlang 11Mochikit

    2

  • Erlang 11Mochikit memcched

    2

  • Erlang 11Mochikit memcched http://d.hatena.ne.jp/cooldaemon/20071113

    2

  • Erlang 11Mochikit memcched http://d.hatena.ne.jp/cooldaemon/20071113

    Erlang Perl

    2

  • Erlang 11Mochikit memcched http://d.hatena.ne.jp/cooldaemon/20071113

    Erlang Perl http://d.hatena.ne.jp/cooldaemon/20080214

    2

  • 3

  • mochiweb

    3

  • Web I/F

    mochiweb

    3

  • Web I/F

    Source

    mochiweb

    3

  • Web I/F

    4

  • $ svn checkout http://mochiweb.googlecode.com/svn/trunk/ /path/to/mochiweb

    $ cd /path/to/mochiweb$ make$ chmod 755 ./scripts/new_mochiweb.erl

    5

  • $ /path/to/mochiweb/scripts/new_mochiweb.erl demo_project /path/to/

    6

  • $ /path/to/mochiweb/scripts/new_mochiweb.erl demo_project /path/to/

    /path/to/demo_project

    6

  • 7

  • OTP

    7

  • OTP application / supervisor

    7

  • OTP application / supervisor edoc

    7

  • OTP application / supervisor edoc

    Makele

    7

  • OTP application / supervisor edoc

    Makele make

    7

  • OTP application / supervisor edoc

    Makele make

    &

    7

  • $ /path/to/demo_projet/start-dev.sh

    8

  • $ /path/to/demo_projet/start-dev.sh

    reloader &

    8

  • $ /path/to/demo_projet/start-dev.sh

    reloader &

    8

  • $ /path/to/demo_projet/start-dev.sh

    reloader &

    8

  • 9

  • 9

  • Web

    9

  • Web yaws

    9

  • Web yaws

    9

  • Web yaws

    9

  • Web yaws

    HTML or JSON Erlang

    9

  • Web yaws

    HTML or JSON Erlang

    9

  • 1-module(demo_project_web).-export([start/0, loop/1]).

    start() -> mochiweb_http:start([{name, ?MODULE}, {loop, loop/1}]).

    loop(Req) -> Req:serve_le(Req:get(path), /path/to/demo_project/priv/www/).

    10

  • 1-module(demo_project_web).-export([start/0, loop/1]).

    start() -> mochiweb_http:start([{name, ?MODULE}, {loop, loop/1}]).

    loop(Req) -> Req:serve_le(Req:get(path), /path/to/demo_project/priv/www/).

    /path/to/demo_project/priv/www/

    10

  • 1-module(demo_project_web).-export([start/0, loop/1]).

    start() -> mochiweb_http:start([{name, ?MODULE}, {loop, loop/1}]).

    loop(Req) -> Req:serve_le(Req:get(path), /path/to/demo_project/priv/www/).

    /path/to/demo_project/priv/www/

    30 (mochiweb_util:guess_mime/1 )

    10

  • 2loop(Req) -> loop(Req, Req:get(method), Req:get(path)).

    loop(Req, Method, "/") when Method =:= 'GET'; Method =:= 'HEAD' -> Req:ok({"text/html", [], >});

    loop(Req, _Method, _Path) -> Req:not_found().

    11

  • 2loop(Req) -> loop(Req, Req:get(method), Req:get(path)).

    loop(Req, Method, "/") when Method =:= 'GET'; Method =:= 'HEAD' -> Req:ok({"text/html", [], >});

    loop(Req, _Method, _Path) -> Req:not_found().

    11

  • 2loop(Req) -> loop(Req, Req:get(method), Req:get(path)).

    loop(Req, Method, "/") when Method =:= 'GET'; Method =:= 'HEAD' -> Req:ok({"text/html", [], >});

    loop(Req, _Method, _Path) -> Req:not_found().

    11

  • 3Req:ok({ "text/html", [mochiweb_cookies:cookie("key", "value")], to_html( {html, [], [ {head, [], [title, [], ]}, {body, [], [, , {br}]} ]} )});

    12

  • 3Req:ok({ "text/html", [mochiweb_cookies:cookie("key", "value")], to_html( {html, [], [ {head, [], [title, [], ]}, {body, [], [, , {br}]} ]} )});

    Cookie

    12

  • 3Req:ok({ "text/html", [mochiweb_cookies:cookie("key", "value")], to_html( {html, [], [ {head, [], [title, [], ]}, {body, [], [, , {br}]} ]} )});

    Cookie

    Erlang HTML 12

  • 13

  • 13

  • 13

  • 13

  • 13

  • CommonTest

    13

  • CommonTest

    13

  • CommonTest

    SASL (System Architecture Support libraries) 13

  • Source

    14

  • Source

    15

  • Source

    15

  • Source

    835

    15

  • Source

    835

    15

  • Source

    835

    15

  • Source

    835

    15

  • 16

  • OTP

    16

  • OTP Web

    16

  • OTP Web

    16

  • OTP Web (reloader)

    16

  • OTP Web (reloader)OO (mochiweb_request/mochiweb_response)

    16

  • OTP Web (reloader)OO (mochiweb_request/mochiweb_response)gb_trees (mochiweb_header)

    16

  • OTP Web (reloader)OO (mochiweb_request/mochiweb_response)gb_trees (mochiweb_header)socket http (mochiweb_http)

    16

  • 1start.sh

    demo_project:start/0

    demo_project_app:start/0

    demo_project_sup:start_link/0

    demo_project_web:start/1

    erl -s

    application:start/1

    supervisor:start_link/3

    demo_project_sup:init/1

    17

  • 2mochiweb_http:start/1

    mochiweb_socket_server:start/1

    mochiweb_socket_server:start_server/1

    mochiweb_socket_server:init/1

    mochiweb_socket_server:gen_tcp_listen/3

    mochiweb_socket_server:new_acceptor/1

    mochiweb_socket_server:acceptor_loop/3

    gen_server:start_link/3

    proc_lib:spawn_link/3

    18

  • mochiweb_socket_server:acceptor_loop/3

    mochiweb_socket_server:call_loop/2

    mochiweb_http:loop/2

    mochiweb_http:request/2

    mochiweb_http:headers/4

    demo_project_web:loop/2

    mochiweb_socket_server:handle_cast/2

    gen_server:cast/2

    mochiweb_socket_server:new_acceptor/1

    19

  • 20

  • mochiweb

    20

  • Web I/F

    mochiweb

    20

  • Web I/F

    Source

    mochiweb

    20

  • BLOG

    21

  • BLOG http://d.hatena.ne.jp/cooldaemon/

    21

  • BLOG http://d.hatena.ne.jp/cooldaemon/

    21

  • m(_ _)m

    22