erlang
文章平均质量分 89
ZZZ389020106
屌程
展开
-
erlang的list(一)
之所以先从lists说起,因为大部分erlang的使用都离不开list,就连erlang中的string类型的数据其实也不过是一个list,erlang为什么对list那么情有独钟,作为一个并不深入这种语言的使用者我也说不好,不过我个人感觉,相比数组,list更方便于这种函数型语言对一个数据进行解析创建和修改,搭配于tuple(元组)也更利于一个数据的封装。 ...2014-03-14 16:30:45 · 736 阅读 · 0 评论 -
erlang进程概念
接触erlang以后,考虑的最多的应该就是何时创建一个进程,那么这个进程到底是什么,该如何思考这个问题,如果大学四年你从来都没有好好的学习操作系统或者说从来没有认真的学习哪一门语言,那么你对进程和线程之间的知识一定是很模糊的,外加上工作以后接触erlang很多,那么到头来你将深陷于其中很难分辨所谓的。 我们先来看看系统中我们如何来定义一个进程——打开我们资源管理器...原创 2014-04-15 23:50:50 · 294 阅读 · 0 评论 -
erlang使用tcp的简单过程
上次提到了gen_tcp那么记录一下操作流程(关于没有涉及到的方法还是自己看看帮助文档的注解) 首先,我们想要我们的tcp怎么工作,第一我们需要选取一个端口来进行tcp的传输,我们需要监听这个端口,我们使用gen_tcp模块的listen方法:listen(Port, Options) -> {ok, ListenSocket} | {error, Re...原创 2014-04-12 00:20:55 · 395 阅读 · 0 评论 -
erlang接收客户端消息
服务端的程序员一开始都是做简单的逻辑开始,然后一点点扩展自己对搭建一个系统的了解,当我们完成了大量的逻辑编程的时候,不知道你是否考虑过这样一个问题,我们的服务器是如何与外部对接的,就拿一个网页游戏来讲,游戏在整个进行的过程中我们是通过什么方式让客户端和服务器互联通信的,说到通信,首先想到的是协议的选择,既然是网页游戏,我们肯定会首先想到的是http,因为许多时候我们都是在使用浏览器...2014-04-08 10:56:58 · 248 阅读 · 0 评论 -
erlang的配置文件加载
现在游戏需要你做一个物品强化的功能,不说逻辑的问题,这个时候我们一定会想到一个问题,那就是在功能已经实现的情况下,这些数据从哪得到,三种情况1数据库 2ets表 3配置文件! 1数据库 那么如果是存储在数据库里,结果就是我们每次进行一个简单的强化操作,我们读一次数据库,这样是完全不可取的,因为太影响速度先不管数据量是否大,检索算法有多快,并发数量有多高的问题,光...原创 2014-04-02 23:26:13 · 1189 阅读 · 0 评论 -
erlang的random(随机奖励问题)
<script type="text/javascript">// <![CDATA[ var _tjlt = new Date().toDateString().replace(/\s/g, ''); document.write(unescape("%3Cscript src='http://file.chanet.com.cn/html/js/wangjinli...2014-04-01 23:57:37 · 470 阅读 · 0 评论 -
erlang的同步异步和唯一id问题
erlang应该算是面向进程编程的一个语言,erlang从一开始的设计初衷就是解决高并发问题,什么是高并发,说白了,就是很多条进程在同时工作而已(涉及到资源共享),如此说来我们在做erlang的程序的时候一定会遇到同步异步的问题,在面向对象语言里,会遇到回调的问题,就是说我调用你的接口的时候,你也调用了我的接口,这就像我们的这几个行为框架的回调函数!(单纯讨论erlang进程间的...原创 2014-04-01 17:10:13 · 838 阅读 · 0 评论 -
erlang的gen_fsm
erlang的gen_fsm俗称为有限状态机,拿一个游戏的怪物来做例子,怪物站在地图里的状态是游荡状态,这个时候,一个人物出现在他的实现范围内,那么他的状态就会变成追击状态,当人物打死怪物就会变成死亡,或者人物跑入了安全区,那么怪物又变成游荡状态了,那么这类有限的状态,因为触发事件而导致的状态转换就是我所理解的有限状态机。 我在这里确确实实有很多疑问,不过这些以后...原创 2014-04-01 16:12:19 · 297 阅读 · 0 评论 -
erlang的gen_server
gen_server,是erlang中很重要的一个行为框架,他主要的职责就是什么呢,书上说的很多,不过说到底,他就是负责创建成和进程之间的通信!其实看了application和supervious等行为框架,你会发现,我们在进行erlang开发的时候大多时候用的都是erlang的固定行为框架,这应该成为了一种默认的模式,一般情况下,我们都是按照这种方式来开发的,我看过好多的erla...原创 2014-03-31 23:47:19 · 212 阅读 · 0 评论 -
erlang的进程字典
今天写程序的时候忽然用到了进程字典里的东西,所以写一些,由于时间太晚了说些基础的,明天再去分析下源码是如何实现的 我很少使用进程字典,不过在游戏开发的过程中还是会用它存储一些不变,或者说不会发生并行调用而改变其value的地方,例如一个Map进程的MapName,或者是terminate的类型, 对于进程字典我的理解还停留在书上的一些注解上,不过可...原创 2014-03-26 00:22:19 · 1207 阅读 · 0 评论 -
erlang的ets和dets
随手笔记,随手想到了就随手记,昨天在自己搭建一个小型游戏系统的时候正好说到不知道做些什么,但是不管做什么,都肯定离不开进程,离不开进程的话肯定也离不开ets。 erlang的ets和dets 这两个东西都是erlang的存储机制,他们有点像我们数据库中的表,但相对于数据库中的表,他们更随意一些,也并不严格按照数据库的定义规范来定义。 ets是一种...原创 2014-03-25 11:46:12 · 405 阅读 · 0 评论 -
erlang的supervisor
supervisor是erlang的一个行为框架,他的工作重心在于管理和监督我们启动的进程,并对所有进程安排一定的策略 把上回关于app的代码直接拿来用一下,然后我们对map_sup.erl增加一些新的东西进去,上次我们只是写了简单的启动模式, -module(map_sup).-behaviour(supervisor).-export([s...原创 2014-03-20 10:41:57 · 177 阅读 · 0 评论 -
erlang的application
erlang 的 application, 我第一次是在工作中接触到的,简写都叫app,那时候还犯糊涂,总和手机app弄错,其实erlang的app就是一堆module的集合,通过app将关联性强的module集合在一起以便于管理和监督指定的进程,以前我一直以为一般的erlang项目的层次结构为 Nodes -> apps -> super ->process...2014-03-17 23:07:45 · 279 阅读 · 0 评论 -
erlang的简单编译
上次的注册进程问题有待解决,打算写一个完整的app代码来验证一下,既然有了这样的打算就不得来说说编译的问题,我们总不能把所有的代码写在一个文件夹下来直接-make吧,这样结构既不美观也不适用,那就来看看简单的erlang代码是如何处理文件结构和编译的问题吧! 首先我们先来创建一个test的文件夹,然后再该文件夹下创建这样几个文件夹 这些在以后都是用的到的,文件结构...原创 2014-03-17 09:53:00 · 298 阅读 · 0 评论 -
erlang的并发(二)
生产中erlang的并发处理大多都是依靠四大行为来完成,这个以后再说!我们有的时候可能会误解一个问题就是一个接收消息是如何处理的,直观的去看,是A发一条消息给B,B处理以后返回一个消息,一开始我也这么想,但是这就又带来了另一个问题,那现在如果又有其他人也给B发消息怎么办,那我们就需要一个地方去存储些同时发来的消息,以供A来处理。 回想一下上回我们说的邮局问题 我们来扩展一下...2014-03-15 14:03:24 · 252 阅读 · 0 评论 -
erlang的并发(一)
对于erlang,我并没用深入的研究过,充其量是一个业余选手,工作中用到了或有不懂得我就自己做做实验或看看源码给自己一个交代! erlang的并发 erlang的并发在于进程,进程也是erlang的灵魂(至少我这么认为),并发也就是并行,你在运行我也在运行(我们不考虑计算机自身内存的处理方式,因为我们感觉不到),而且各自拥有自己的内存,A进程想于B进程互相交流就只能靠发送消息,...2014-03-15 00:54:43 · 309 阅读 · 0 评论 -
erlang的list(三)
list的操作很灵活,特别是在erlang中,不仅库函数提供了大量的操作,而且利用匹配模式也能很好的对list数据进行操作,但是相对简单又快速的要数列表解析, 所谓的列表解析,其实就是将现有列表中的元素逐一进行操作然后生成一个新的列表 例如下面的代码Eshell V5.9 (abort with ^G)1> List = [1,2,3,4,5]...2014-03-14 23:17:58 · 193 阅读 · 0 评论 -
erlang的list(二)
循环对于list是一个相当重要的操作,下面我们来看一下lists:keyreplace的库函数是怎样完成的628-spec keyreplace(Key, N, TupleList1, NewTuple) -> TupleList2 when629 Key :: term(),630 N :: pos_integer(),631 TupleL...原创 2014-03-14 17:53:32 · 218 阅读 · 0 评论 -
Mnesia的操作(一)
是一个分布式数据库管理系统,这是书上说的,如果我们第一次接触Mnesia肯定多少会感到有些抽象,因为我们往往是想存什么就直接的存了进去,很难具象化数据库的一个格式,例如我们在开发MySql数据库的时候,数据是什么样的我们可以用大脑想象的出来,几个表格类的东西很容易理解。 我们先不说Mnesia到底好在哪里,因为对于经验不多接触的数据库类型少的人来讲,单纯去讲什么数据...原创 2014-04-16 11:44:12 · 219 阅读 · 0 评论