`
做一行爱一行吧
  • 浏览: 23534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang的gen_fsm

 
阅读更多

       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则是实现一个事件处理器,专门负责处理一个事件发生后对对象产生的影响

       

      

      

分享到:
评论

相关推荐

    基于Erlang的gen_tcp聊天室代码,功能完整

    - 处理连接请求,为每个新连接创建一个新的进程(通常是一个gen_server或gen_fsm行为)。 - 注册和登录逻辑,处理用户认证请求。 - 监听和转发消息,确保消息在正确用户间传递。 - 错误处理和异常恢复,确保系统的...

    erlang OTP Design Principles之Gen中文

    Erlang OTP设计原则中的Gen_Fsm行为是一个关键的概念,用于构建健壮、可扩展的并发应用程序。Gen_Fsm,即通用有限状态机,是一种行为模式,它提供了一种结构化的方法来处理具有多种状态和事件的系统。本文将深入探讨...

    Erlang_OTP_设计原理(含目录).pdf

    行为(Behavior)是一组预定义的模式,用于实现常见类型的进程,如服务器进程(Gen_Server)、有限状态机(Gen_Fsm)、事件处理器(Gen_Event)和监督进程(Supervisor)。这些行为模式通过行为模块和回调模块的分离...

    Erlang otp_win64_22.0

    10. **行为模块**:如GenServer、GenEvent和Gen_fsm等,是OTP的一部分,它们提供了一种组织代码和处理并发行为的标准方式。 压缩包子文件"otp_win64_22.0.exe"的安装流程通常包括以下步骤: 1. 下载并运行安装程序...

    Erlang otp_win64_21.1.exe otp_win32_21.1.exe

    它包含了一系列预定义的模块、行为(如GenServer、GenEvent和Gen_fsm)以及设计原则,这些都旨在帮助开发者创建可靠和可扩展的应用程序。例如,Erlang的进程模型允许程序中的组件独立运行,通过消息传递进行通信,这...

    erlang_otp_src_17.3.tar.gz

    7. **行为模块**:如gen_server、gen_event、gen_fsm等,是OTP设计模式的具体实现,简化了编写服务器、事件处理器和有限状态机的代码。 关于压缩包内的"otp_src_17.3",这是Erlang OTP 17.3版本的源代码目录。为了...

    Erlang otp_win64_21和22版本 exe

    - **行为模块**:如GenServer、GenEvent和Gen_fsm等,它们定义了常见的并发模式,简化了状态管理和事件处理。 - **应用程序管理**:OTP提供了应用程序框架,用于组织和管理软件组件,确保其按预期启动、停止和升级...

    erlang的翻译文档

    - **独立Gen_Fsm**:解释了如何处理独立的Gen_Fsm实例。 - **处理其他消息**:讲解了如何处理非状态事件的消息。 - **Gen_Event 行为** - **事件处理原则**:介绍了Gen_Event的行为模式。 - **示例**:提供了...

    heroku-genfsm:一个Heroku Erlang应用程序-Genfsm

    heroku-genfsmAn experimental Erlang app which deployed on HerokuSome Deploy Detail在 Heroku 上部署 Webmachine + Mochiweb + ErlyDTL 组合的 Erlang Web 应用

    使用OTP原理构建一个非阻塞的TCP服务器

    OTP为开发健壮、容错的应用提供了强大的框架,它包含了一系列行为模式,如gen_server和gen_fsm,这些模式可以帮助我们构建高效、可扩展的服务。 首先,我们需要理解什么是非阻塞TCP服务器。在Erlang中,"非阻塞"指...

    erlang_standard_snippets-源码.rar

    8. **行为(Behaviours)**: Erlang的行为如gen_server、gen_event和gen_fsm,提供了标准的服务器、事件管理和有限状态机的实现框架。源码中可能会有这些行为的实例。 9. **并发与分布式(Concurrency and ...

    Erlang_OTP_设计原理 中文版

    例如Gen_Server、Gen_Fsm、Gen_Event和Supervisor等。每个行为模式都有其通用部分和特定部分。通用部分由Erlang/OTP库提供,开发者只需要专注于实现特定部分,即回调模块,以及根据需要导出特定的回调函数。 3. ...

    Erlang中文手册.pdf

    - **2.3.1 有限状态机**:Erlang中的Gen_Fsm行为允许实现有限状态机。 - **2.3.2 实例**:提供了一个Gen_Fsm行为的实例。 - **2.3.3 启动一个Gen_Fsm**:如何启动一个有限状态机。 - **2.3.4 事情通知**:事件被...

    Erlang-game-server开发实践.pdf

    * 游戏逻辑层:使用Erlang的Actor模型和gen_fsm行为树来实现游戏逻辑。 * 网络层:使用Ranch和Cowboy框架来实现网络层,处理客户端的连接和通信。 * 数据库层:使用Erlang的ETS、Mnesia、MySQL、MongoDB等数据库来...

    Inside_Erlang_OTP

    3. 进程行为(Behaviours):如GenServer、GenEvent和Gen_fsm等,为常见的并发模式提供了抽象,简化了开发过程。 4. 公共服务:如Mnesia数据库,一个分布式、事务型的数据库系统,设计用来与Erlang的并发和容错特性...

    Erlang OTP设计原理文档 中文版本

    5. Gen_FSM(Finite State Machines): `gen_fsm.html`涵盖了生成有限状态机的行为,它允许开发人员创建具有多个状态和转换规则的进程。这种行为模式适用于处理事件驱动的、有明确状态变化的应用。 6. Gen_Event...

    otp_src_R11B-5.tar.gz_OTP_erlang_otp-src-R11B_otp_s

    这些库包括Mnesia(分布式数据库)、Event Logger、公共接口定义语言(CIDL)以及行为模式如GenServer、GenEvent和Gen_fsm等。这些行为模式为开发者提供了构建状态管理、事件处理和分布式服务的标准结构,使得代码...

    erlang9.rar

    OTP库提供了许多实用的模块,如gen_server、gen_event和gen_fsm,这些都是Erlang并发编程的基础。 总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以...

    erlang server源码

    Erlang提供了一些预定义的行为模式,如gen_server、gen_event和gen_fsm等,它们为实现特定类型的服务提供了模板。echatServer可能使用gen_server行为来实现服务器的核心逻辑,包括用户注册、登录、发送和接收消息等...

Global site tag (gtag.js) - Google Analytics