首先一个完整的otp应该包含 应用(application) -》 监控进程 (supervisor) -》 通用服务器(gen_server)
这三者之间的关系 通过application 创建 supervisor ,然后再由supervisor 创建 通用服务器或另一个监控进程。
不过这次我先介绍gen_server这块。
1gen_server:start_link/4 和start/4应该是最常见了 启动服务器的函数,详细参数我就不说了,大家在本站看
而它作用就是初始化,不过最重要就就是返回{ok,LoopData},这个LoopDate的作用很大,它是一个循环数据。
作个列子就是有玩家登陆服务器,你用start_link/4初始化时了创建玩家的各种属性,那么这个Player就可以放到
这个LoopData中。
2消息的传递 :gen_server:cast/2 gen_server:call/3
cast是异步消息请求,call是同步的。他们作用是向服务器发送消息,而负责处理接受消息的是hanld_cast/2和
hanld_call/3 ,重点就是他们的中有一个参数是上面的LoopData,在处理消息时你可以修改这个LoopData,最后
都要返回一个新的LoopData,这样就能根据客户端的动作行为来改变玩家的属性。
3停止服务器 这里用到了terminate/2回调函数
stop() ->
gen_server:cast(?MODULE,stop).
handle_cast(stop,LoopDate) ->
{stop,Reason,LoopData}.或{stop,Reason,Reply,LoopData}%固定格式来调用terminate/2
terminate(Reason,LoopData) -> ....
当然 你不会想让客户端拥有关闭服务器的能力,所以这个stop一般都是不会导出和实现的.
|