(2)小項目----建立erlang服務端,erlang服務端

來源:互聯網
上載者:User

(2)小項目----建立erlang服務端,erlang服務端

原本打算在window下在quick裡面嵌入protobuf,發現錯誤很多。研究一天都沒搞好。只能休息下搞下erlang服務端,先將服務端搞好再回頭嵌入protobuf到quick。

在window下不能用rebar,只能自己管理。erlang 是自己弱項。做個簡單的服務端基於OTP架構,是一個標準的實現,以後再慢慢擴張吧。

(1).建立好目錄doc,ebin,include,priv,src,testClient

(2).在ebin目錄下加入中繼資料server.app,用來啟動application

(3).在src下建立bz_server_sup.erl,bz_server_app.erl,bz_server.erl 三個檔案。

bz_server_app.erl 用來打包程式,啟動,關閉。只提供start/2,stop/1兩個函數

start(_StartType,_StartArgs) ->
{ok,LSock} = gen_tcp:listen(?DEFAULT_PORT,?TCP_OPTIONS),
case bz_server_sup:start_link(LSock) of 
{ok,Pid} ->
bz_server_sup:start_child(),
{ok,Pid};
Other ->
io:format("bz_server_app Listen error : ~p !",[Other]),
{error,Other}
end.


stop(_State) ->
ok. 

bz_server_sup.erl 監聽者頂級監聽,規定了子監聽的啟動

start_link(LSock) ->
supervisor:start_link({"127.0.0.1",?SERVER},?MODULE,[LSock]).

start_child() ->
supervisor:start_child(?SERVER,[]).


%%Supervisor callback
init([LSock]) ->
Server = {bz_server, {bz_server, start_link, [LSock]},
              temporary, brutal_kill, worker, [bz_server]},
    Children = [Server],
    RestartStrategy = {simple_one_for_one, 0, 1},
    {ok, {RestartStrategy, Children}}.

bz_server.erl.    gen_server ,負責等待串連以後的多數實現就在這裡實現。以後打算就在這裡實現重用戶端發送過來的訊息在分發下去。

%%-------------private---------------------
accept(ListenSocket) ->
case gen_tcp:accept(ListenSocket) of
{ok,Socket} ->
io:format("<<<<<<<<<<start connect>>>>>>>>> \n"),
io:format("accept client socket : ~p \n ",[Socket]),
gen_tcp:controlling_process(Socket, self()),
bz_server_sup:start_child();
{error,Reason} ->
io:format("accept error reason : ~p \n",[Reason]),
accept(ListenSocket);
_Res ->
io:format("accept unexpected result : ~p \n",[_Res]),
accept(ListenSocket)
end.


handle_info({tcp,Socket,RawData},State) ->  %%資料收取分發
io:format("Socket :~p , RawData : ~p \n",[Socket,RawData]),
%%gen_tcp:send(Socket, "erlang server bin"),  
{noreply,RawData};

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.