gen_server behaviour
gen_server为最常用的一个behaviour,其定义了client/server模型的基本框架。
我们只需要定义一个“回调”(callback)module,实现必要的export fun。
1.genserver:start_link/4
启动gen_server调用start_link/4,比如:gen_server:start_link({local, myserver}, myserver, arg, [])表示我们在本地节点注册一个名叫myserver的process,这个参数也可以忽略,那样就不会为process注册名称,而一切交互采用Pid进行。
第一个参数也可以为{global,myserver},表示通过调用global:register_name/2来进行名字的注册。
第二个参数myserver为回调模块名称(atom)
第三个参数为传递给myserver:init的参数,此处为空(Term)
第四个参数为gen_server的相关选项
函数成功则返回{ok, Pid}.
start_link/4会调用myserver:init/1进行初始化工作,这里的调用是同步进行的,只有init/1执行完毕后,start_link/4才可执行完毕。
注意如果此behaviour用在监督树中,则必须使用gen_server:start_link/4启动,如果某个单独的应用可以采用 gen_server:start启动。监督树中为什么使用gen_server/start_link/4其实好好想想就有答案了,因为监督树的目的就是为了维护控制worker,出错时进行必要的restart,因此只有将其link起来才能进行这些操作,否则互不相干啊。呵呵
2. myserver:init(Arg) -> {ok, State} | {stop, Reasion}
进行初始化,如果成功返回新的状态,否则gen_server停止
3. gen_server:call(Name, Term) -> Term
进行同步调用,即请求-等待结果。call内部调用myserver:handle_call/3函数。
4. gen_server:cast(Name, Term) -> void
进行异步调用,类似消息,调用后立即返回。cast内部调用myserver:handle_cast/2函数
5. gen_server的停止
如果gen_server是监督树(supervision tree)的一部分stop函数是没有必要的。gen_server会自动的被监督树停止。这里与监督树的停止策略(shutdown strategy)相关。如果停止策略为指定时间内停止,gen_server便可以在停止前做一些清理工作,首先在myserver:init/1中设置trap_exit为true(process_flag(trap_exit, true)),然后设置对应的terminate/2函数:terminate(shutdown, State)再此函数内就可以进行清理工作(因为监督树会首先向gen_server发送exit(Pid, shutdown)消息,然后等待某个超时,如果超时内Pid未停止则调用exit(Pid, kill)进行野蛮(brutal)的kill,此处参考supervision tree的shutdown strategy)。
continue....
分享到:
相关推荐
文档详细讲解了Gen_Server行为模式,其中包括如何启动和停止Gen_Server,处理同步(Call)和异步(Cast)调用,以及在监督树中的集成。Gen_Fsm行为介绍了有限状态机的基本原理以及如何使用Gen_Fsm来管理状态变化和...
本文将详细讲解如何在HP D388 Gen9服务器上安装Windows Server 2008 R2操作系统。 首先,惠普D388 Gen9服务器的一大特点是其集成的引导功能。与早期服务器不同,Gen9服务器不再需要单独的引导盘,这减少了硬件丢失...
- **Gen_Server 行为**:文档中未给出具体细节,但通常涉及服务器进程的设计和实现。 - **Gen_Fsm 行为** - **有限状态机**:介绍了如何使用Gen_Fsm实现状态机逻辑。 - **示例**:提供了Gen_Fsm的具体用法示例。 ...
5. **行为模式(Behaviours)**:如`gen_server`、`gen_event`和`supervisor`等,这些是Erlang OTP设计模式的实现,它们为特定的系统角色提供了基础架构。例如,`gen_server`适用于处理服务请求,`gen_event`用于...
这篇文章主要讲解了如何在Erlang和Python之间实现通信,这对于构建分布式系统或者利用不同语言的优势处理特定任务非常有用。Erlang以其并发特性和稳定性著称,而Python则因为其丰富的库和易读性而受到青睐。通过两者...
- **2.2 Gen_Server Behaviour**:文档缺失,未提供具体细节。 - **2.3 Gen_Fsm Behaviour**:讲解如何使用有限状态机行为。 - **2.3.1 有限状态机**:Erlang中的Gen_Fsm行为允许实现有限状态机。 - **2.3.2 实例*...
OTP包含了一系列预定义的行为(behaviours),如gen_server和gen_event,它们提供了通用的模块结构和错误处理机制。书中会详细介绍OTP的概念和使用方法,帮助读者更好地利用这些工具。 ETS(Erlang Term Storage)...
这为用户提供了系统恢复和更新管理的选项,并介绍了HP服务器特有的如Automatic Server Recovery (自动服务器恢复) 功能。 综合以上内容,用户指南是一份面向专业IT技术人员的详尽指南,涵盖了从硬件识别到软件配置...
目录:网盘文件,永久...HPE Gen10服务器讲解 HPE Gen9服务器讲解 HPE Proliant Server软件培训 - iLO5、Scripting toolkit、ILOREST、Redfish HPE Synergy 故障诊断(H264) HPE Synergy管理网络连接及硬件初始化
例如,Gen_Server和Gen_Fsm都是Erlang OTP提供的行为模式,它们定义了处理消息的基本结构,并要求开发者实现与具体逻辑相关的回调函数。 应用(Application)在Erlang/OTP中是一个封装了代码、模块、资源文件和配置...
生成 Thrift 头文件是使用 Scribe 的关键步骤,需要找到 scribe.thrift 和 fb303.thrift 文件,然后使用 thrift 工具生成对应语言的代码,例如在 PHP 中,执行 `thrift -r --gen php scribe.thrift`。生成的代码将...
- **在JBoss AS上运行示例**:这部分介绍了如何在JBoss Application Server上部署并运行Seam示例项目。 - **在Tomcat上运行示例**:如果选择使用Tomcat作为应用服务器,则可以参考这部分内容进行配置和部署。 - **...
yum install mongo-10gen-server ``` 这将同时安装MongoDB服务器和一些客户端工具,如`mongo`、`mongod`等。值得注意的是,由于依赖关系,安装服务器端时,客户端工具包`mongo-10gen`也会自动被安装。 如果只需要...
本篇将详细讲解如何将Spring与Thrift整合,构建一个Server和Client,以实现高效的数据通信。 首先,我们需要了解Thrift的基本原理。Thrift通过定义一种中间描述文件(.thrift),来生成不同语言的客户端和服务端...
Thrift在Windows系统下的安装和使用讲解 Thrift是一个开源的、跨语言的 RPC 框架,由Facebook开发,目前是Apache的顶级项目。Thrift允许用户定义一个IDL(Interface Definition Language),然后生成相应的服务端和...
本文将详细讲解 HP DL388 G7 服务器的配置和 BIOS 设置过程,包括 HP iLO 配置、RAID 设置、BIOS 设置、Linux 安装等方面的知识点。 一、HP iLO 配置 HP iLO(Integrated Lights-Out)是 HP 服务器的一种远程管理...
接下来,我们将基于提供的文档内容详细讲解在SLES12上安装Oracle RAC **.*.*.*.0版本的详细步骤和必要条件。 ### 硬件和软件要求 在开始安装之前,首先需要确认服务器的硬件和软件配置是否满足Oracle RAC的最低要求...