If you can't read please download the document
Upload
cooldaemon
View
2.024
Download
0
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