(2)小项目----建立erlang服务端

本文详细记录了一位开发者在尝试在Window环境下将protobuf嵌入到Quick中遇到的问题,以及解决之道。作者最终决定先专注于Erangl服务端的开发,并分享了其基于OTP框架实现服务端的基本步骤,包括目录结构的搭建、应用程序启动文件的编写等。此过程展示了开发者面对技术挑战时的灵活调整策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原本打算在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};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值