erlang的gen_fsm俗称为有限状态机,拿一个游戏的怪物来做例子,怪物站在地图里的状态是游荡状态,这个时候,一个人物出现在他的实现范围内,那么他的状态就会变成追击状态,当人物打死怪物就会变成死亡,或者人物跑入了安全区,那么怪物又变成游荡状态了,那么这类有限的状态,因为触发事件而导致的状态转换就是我所理解的有限状态机。
我在这里确确实实有很多疑问,不过这些以后再说!以下是gsm的模板块和回调函数
-module(whatever). -behaviour(gen_fsm). -export([start_link/0]). -export([init/1, handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4]). start_link() -> %%启动一个sup的子进程这个进程,这个方法要直接或者间接的被super调用,%%很生涩,其实不难理解 gen_fsm:start_link({local, ?MODULE}, ?MODULE, [], []). %%start_link以后调用init初始化状态和state一些参数State init([]) -> {ok, state, State}. %%同步调用 handle_event(_Event, StateName, State) -> {next_state, StateName, State}. %%异步调用 handle_sync_event(_Event, _From, StateName, State) -> Reply = ok, {reply, Reply, StateName, State}. %%消息调用 handle_info(_Info, StateName, State) -> {next_state, StateName, State}. %%技术进程 terminate(_Reason, _StateName, _State) -> ok. code_change(_OldVsn, StateName, State, _Extra) -> {ok, StateName, State}. %%建议把帮助文档里关于gserver和gfsm的内容看一遍,很便于理解这些框架的工作机制,以后工作中也 %%方便我们去查找
这只是基础的回调函数模块知道了,很多人不知道改什么时候用哪个模块,其实这是个很大的问题,这是自己在给自己找麻烦,曾经我也是这样,帮助文档和基本模块都给了我,我却不知道该怎么写一个功能,现在想来那时候有点蠢,就像fsm,一个事件发生了,如果你是需要得等待一个回调结果,那就使用同步调用,如果不需要那就直接用异步调用就可以了,而我们在开始的时候调用init,就在init里面写一个你自己需想要处理的状态就可以,这里要写的是什么呢,一般情况下都是写一个ets进去,如果写的程序大一些,需要进程间共享内存,那么你就需要ets!(如果启动的进程的callback函数出现异常会按照super的规则来处理,说白了就是被终止或者被重启)
我一直有一个疑问,gen_server和gen_fsm之间的关系,我来打个比方,gen_server可不可以完成一个有限自动机的需求,答案是无疑的,可以! 那么我们为什么还要使用gen_fsm呢!如果硬要我说的话,我觉着这是一个对不同情况的处理思想问题,例如gserver 他的主要目的就是作为一个小型server框架,完成的就是客户端和服务器的逻辑,更多时候我们只依靠他来完成两端的一些连接交互等等功能!而gfsm呢就是一个有限状态机的框架,帮助我们完成一个对象的有限状态转换的框架,我们的确可以用自己的方式或者是使用gserver来完成gfsm的逻辑,但是这样做其实很麻烦,而gfsm给我们提供了一套的现行高效的代码,这可能就是erlang编程的一个规范而已!(gen_event则是实现一个事件处理器,专门负责处理一个事件发生后对对象产生的影响)
相关推荐
- 处理连接请求,为每个新连接创建一个新的进程(通常是一个gen_server或gen_fsm行为)。 - 注册和登录逻辑,处理用户认证请求。 - 监听和转发消息,确保消息在正确用户间传递。 - 错误处理和异常恢复,确保系统的...
Erlang OTP设计原则中的Gen_Fsm行为是一个关键的概念,用于构建健壮、可扩展的并发应用程序。Gen_Fsm,即通用有限状态机,是一种行为模式,它提供了一种结构化的方法来处理具有多种状态和事件的系统。本文将深入探讨...
行为(Behavior)是一组预定义的模式,用于实现常见类型的进程,如服务器进程(Gen_Server)、有限状态机(Gen_Fsm)、事件处理器(Gen_Event)和监督进程(Supervisor)。这些行为模式通过行为模块和回调模块的分离...
10. **行为模块**:如GenServer、GenEvent和Gen_fsm等,是OTP的一部分,它们提供了一种组织代码和处理并发行为的标准方式。 压缩包子文件"otp_win64_22.0.exe"的安装流程通常包括以下步骤: 1. 下载并运行安装程序...
它包含了一系列预定义的模块、行为(如GenServer、GenEvent和Gen_fsm)以及设计原则,这些都旨在帮助开发者创建可靠和可扩展的应用程序。例如,Erlang的进程模型允许程序中的组件独立运行,通过消息传递进行通信,这...
7. **行为模块**:如gen_server、gen_event、gen_fsm等,是OTP设计模式的具体实现,简化了编写服务器、事件处理器和有限状态机的代码。 关于压缩包内的"otp_src_17.3",这是Erlang OTP 17.3版本的源代码目录。为了...
- **行为模块**:如GenServer、GenEvent和Gen_fsm等,它们定义了常见的并发模式,简化了状态管理和事件处理。 - **应用程序管理**:OTP提供了应用程序框架,用于组织和管理软件组件,确保其按预期启动、停止和升级...
- **独立Gen_Fsm**:解释了如何处理独立的Gen_Fsm实例。 - **处理其他消息**:讲解了如何处理非状态事件的消息。 - **Gen_Event 行为** - **事件处理原则**:介绍了Gen_Event的行为模式。 - **示例**:提供了...
heroku-genfsmAn experimental Erlang app which deployed on HerokuSome Deploy Detail在 Heroku 上部署 Webmachine + Mochiweb + ErlyDTL 组合的 Erlang Web 应用
OTP为开发健壮、容错的应用提供了强大的框架,它包含了一系列行为模式,如gen_server和gen_fsm,这些模式可以帮助我们构建高效、可扩展的服务。 首先,我们需要理解什么是非阻塞TCP服务器。在Erlang中,"非阻塞"指...
8. **行为(Behaviours)**: Erlang的行为如gen_server、gen_event和gen_fsm,提供了标准的服务器、事件管理和有限状态机的实现框架。源码中可能会有这些行为的实例。 9. **并发与分布式(Concurrency and ...
例如Gen_Server、Gen_Fsm、Gen_Event和Supervisor等。每个行为模式都有其通用部分和特定部分。通用部分由Erlang/OTP库提供,开发者只需要专注于实现特定部分,即回调模块,以及根据需要导出特定的回调函数。 3. ...
- **2.3.1 有限状态机**:Erlang中的Gen_Fsm行为允许实现有限状态机。 - **2.3.2 实例**:提供了一个Gen_Fsm行为的实例。 - **2.3.3 启动一个Gen_Fsm**:如何启动一个有限状态机。 - **2.3.4 事情通知**:事件被...
* 游戏逻辑层:使用Erlang的Actor模型和gen_fsm行为树来实现游戏逻辑。 * 网络层:使用Ranch和Cowboy框架来实现网络层,处理客户端的连接和通信。 * 数据库层:使用Erlang的ETS、Mnesia、MySQL、MongoDB等数据库来...
3. 进程行为(Behaviours):如GenServer、GenEvent和Gen_fsm等,为常见的并发模式提供了抽象,简化了开发过程。 4. 公共服务:如Mnesia数据库,一个分布式、事务型的数据库系统,设计用来与Erlang的并发和容错特性...
5. Gen_FSM(Finite State Machines): `gen_fsm.html`涵盖了生成有限状态机的行为,它允许开发人员创建具有多个状态和转换规则的进程。这种行为模式适用于处理事件驱动的、有明确状态变化的应用。 6. Gen_Event...
这些库包括Mnesia(分布式数据库)、Event Logger、公共接口定义语言(CIDL)以及行为模式如GenServer、GenEvent和Gen_fsm等。这些行为模式为开发者提供了构建状态管理、事件处理和分布式服务的标准结构,使得代码...
OTP库提供了许多实用的模块,如gen_server、gen_event和gen_fsm,这些都是Erlang并发编程的基础。 总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以...
Erlang提供了一些预定义的行为模式,如gen_server、gen_event和gen_fsm等,它们为实现特定类型的服务提供了模板。echatServer可能使用gen_server行为来实现服务器的核心逻辑,包括用户注册、登录、发送和接收消息等...