设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18188|回复: 0
打印 上一主题 下一主题

otp行为 介绍

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-6 02:45:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  首先一个完整的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一般都是不会导出和实现的.

   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-4-27 12:02 , Processed in 0.287465 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表