考慮一個簡單的回聲服務器的以下的erlang代碼:二郎:至controlling_process(),或不controlling_process()
回聲聽者:
-module(echo_listener).
-export([start_link/1]).
-define(TCP_OPTIONS, [binary, {packet, 0}, {reuseaddr, true},
{keepalive, true}, {backlog, 30}, {active, false}]).
start_link(ListenPort) ->
{ok, ListenSocket} = gen_tcp:listen(ListenPort, ?TCP_OPTIONS),
accept_loop(ListenSocket).
accept_loop(ListenSocket) ->
{ok, ClientSocket} = gen_tcp:accept(ListenSocket),
Pid = spawn(echo_worker, usher, [ClientSocket]),
gen_tcp:controlling_process(ClientSocket, Pid),
accept_loop(ListenSocket).
回聲工人:
-module(echo_worker).
-export([echo/1]).
echo(ClientSocket) ->
case gen_tcp:recv(ClientSocket, 0) of
{ok, Data} ->
gen_tcp:send(ClientSocket, Data),
echo(ClientSocket);
{error, closed} ->
ok
end.
無論何時接受客戶端套接字,echo服務器都會生成一個echo工作者,並將該客戶端套接字直接作爲函數參數傳遞。在代碼中有controller_process(),但我已經嘗試了代碼而不調用controls_process(),它也可以。
controls_process()的真正目的是什麼?何時需要?
在此先感謝。