标签:
erlang OTP是一个完整可靠的大型库,乃前人艰苦卓绝之成就;现在尝试一下里面的application inets的Web服务器httpd,写一段代码调用inets服务:
1 -module(inets_httpd). 2 -export([start/0]). 3 4 start() -> 5 inets:start(), 6 inets:start(httpd, [{bind_address, {192,168,178,130}}, {ipfamily, inet}, {port, 18080}, {service_admin, "XXXXXXX@163.com"}, {server_name, "whyang.yang.net"}, {server_root, "."}, {server_tokens, full}, {document_root, "./html"}, {directory_index,["main.html", "index.html"]}, {log_format, common}, {error_log, "/var/inets_httpd_error_temp.log"}, {security_log, "/var/inets_httpd_security_temp.log"}, {transfer_log, "/var/inets_httpd_transfer_temp.log"}]).
编译:
[root@whyang ~]# erlc inets_httpd.erl [root@whyang ~]# l -tr -rw-r--r-- 1 root root 832 Jul 8 19:01 inets_httpd.beam [root@whyang ~]#
执行方式1:
[root@james ~]# erl -noshell -s inets_httpd start
执行方式2:
[root@whyang ~]# erl Erlang/OTP 17 [erts-6.4] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] Eshell V6.4 (abort with ^G) 1> c(inets_httpd). {ok,inets_httpd} 2> inets_httpd:start(). {ok,<0.50.0>} 3>
浏览器看看,服务器是什么(居然还是用Etag标签,这个不够先进):
看看erlang虚拟机里inets服务启动了哪些“进程”(这个进程是erlang虚拟机BEAM定义的进程,不是操作系统的进程):
<0.40.0> application_master:init/4 233 41 0 application_master:main_loop/2 6 <0.41.0> application_master:start_it/4 233 49 0 application_master:loop_it/4 5 <0.42.0> supervisor:inets_sup/1 233 308 0 inets_sup gen_server:loop/6 9 <0.43.0> supervisor:ftp_sup/1 233 52 0 ftp_sup gen_server:loop/6 9 <0.44.0> supervisor:httpc_sup/1 233 171 0 httpc_sup gen_server:loop/6 9 <0.45.0> supervisor:httpc_profile_sup/1 233 122 0 httpc_profile_sup gen_server:loop/6 9 <0.46.0> httpc_manager:init/1 233 78 0 httpc_manager gen_server:loop/6 9 <0.47.0> supervisor:httpc_handler_sup/1 233 52 0 httpc_handler_sup gen_server:loop/6 9 <0.48.0> supervisor:httpd_sup/1 987 426 0 httpd_sup gen_server:loop/6 9 <0.49.0> supervisor:tftp_sup/1 233 52 0 tftp_sup gen_server:loop/6 9 <0.50.0> supervisor:httpd_instance_sup/1 987 770 0 httpd_instance_sup__1 gen_server:loop/6 9 <0.51.0> supervisor:httpd_connection_sup/1 610 1163 0 httpd_connection_sup_ gen_server:loop/6 9 <0.52.0> supervisor:httpd_acceptor_sup/1 610 420 0 httpd_acceptor_sup__1 gen_server:loop/6 9 <0.53.0> httpd_acceptor:acceptor_init/8 1598 3494 0 prim_inet:accept0/2 17 <0.54.0> supervisor:httpd_misc_sup/1 233 41 0 httpd_misc_sup__192_1 gen_server:loop/6 9 <0.55.0> httpd_manager:init/1 2586 5838 0 httpd__192_168_178_13 gen_server:loop/6 9 <0.56.0> erlang:apply/2 233 310 0 file_io_server:server_loop/1 3 <0.57.0> erlang:apply/2 233 308 0 file_io_server:server_loop/1 3 <0.58.0> erlang:apply/2 2586 6748 0 file_io_server:server_loop/1 3 <0.61.0> httpd_request_handler:init/1 2586 23440 0 gen_server:loop/6 9 <0.62.0> httpd_request_handler:init/1 4185 12550 0 gen_server:loop/6 9 <0.63.0> httpd_request_handler:init/1 4185 6476 0 gen_server:loop/6 9 <0.64.0> httpd_request_handler:init/1 2586 6756 0 gen_server:loop/6 9
有几个进程比较多余,比如httpc,和tftp,这里不需要。
标签:
原文地址:http://www.cnblogs.com/andypeker/p/4631120.html