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手册,详细完整,网络tcp开发好东东
Erlang opt_win64 20.2 windows exe 安装包 Erlang 20.2 is the upcoming version of Erlang For Windows x64 installer 截至2018.01.25 groovy最新最稳定版本
Erlang otp_src_20.3.tar.gz linux centos otp-OTP-20.0.tar.gz 可兼容rabbitmq3.7.0
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...
个人学习Erlang的时候自己写的一个基于gen_tcp的聊天室,功能有注册,登陆,获得登陆时间,聊天次数,上次登陆时间等等,资源里有完整代码,注释也很详细.
通用 TCP 服务器 通用 TCP 服务器( gen_tcp_server ) 是一种 Erlang 行为,提供快速简便的方法将 TCP 服务器功能添加到您的应用程序。 它被实现为管理 TCP 连接的主管,因为它是孩子。如何使用它? 运行make来构建。...
erlang tcp_servererlang tcp_servererlang tcp_server
实现了Erlang B/C功能,支持大容量计算
erlang 22.3版本 erlang_otp_src_22.3 安装说明https://blog.csdn.net/tangcv/article/details/111841082
erlang_otp_win64_25.0
Erlang otp_win64_22.0.exe
erlang_23.0.2-1版本 centos7 64bit esl-erlang_23.0.2-1_centos_7_amd64.rpm
是erlang_otp_20.3 的win64安装包,内为exe文件,一路next即可安装完成 是适用于多线程、分布式开发的语言,也是如rabbitmq等重要工具的必须品 使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang...
这个erlang23.0版本,根据rabbitMQ官网的介绍,可以和下面这几个版本的rabbitMQ配合使用: 3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 其他版本的rabbit,请移步其他资源下载
关于在 Erlang 风格的 gen_server 上进行 Ocaml/Async 尝试。
erlang21.0_win64,
Erlang otp_win64_21.2.exe是目前Erlang otp win64位的最新版本。
这是通信专业常用的无线通信容量查表,爱尔兰b表,希望能给有需要的同学用用
Erlang otp_win64_20.1.exe是当前最新版本的,更新时间2017-10-26
Erlang23_3,windows32为64位,linux版本