ERLANG学习总结<二>

一、代码初接触

1.我们来启动程序吧

刚开始导师发下来这个复杂的程序时,完全没有头绪,怎样子才能让它跑起来呢?刚开始看到了好多makefile文件,想来应该是用make命令来处理,折腾了半天发现windows下make不好使了。终于在角落里发现了Script这个文件夹,里面已经把编译的操作写好了,果断使用之。然后在ERLANG的目录下使用OTP中最常用用的application:start()函数,结果一上来就给了我一大堆错误,仔细的看了下错误日志,发现是一个叫sasl的东西没有启动,于是先启动sasl,然后就顺利启动了我们的MGEE啦。

2.出错了怎么办?

服务器启动着,客户端在FLEX下也跑起来了,然后点了下登录,立马就出现了一大堆错误日志,一点点的找,发现时socket被关闭了,然后在AS的代码中发现了段发送无用数据和关闭socket的语句,问了下正辉,果断干掉这几句话,然后又出现了服务端的一个函数不存在的错误,这个函数的作用是解析用户名和密码,找了很久不见这个函数的存在,于是,在看了下用户名和密码的数据结构后,自己写了个函数来解析它吧,把公共的接口用上,就得到了一个正确的解析函数。

在MGEE的错误日志中,可以利用的东西太多了,当出现错误的时候,可以根据错误日志一步步的找到最先出错的函数,这样能够快速的定位出错点,为进一步的修改提供极大的方便

3.绝对利器Appmon

文件这么多,怎么去查看进程间的关系呢?这时候就需要用到一系列的工具了,Appmon能够给予我们关于进程关系的直观视图,通过Appmon,能够看到整个程序的组织结构,其中个别进程的入口点,当前状况。通过使用Appmon,成功的把自己的进程挂在了mgee_sup下面。

二、深入理解,协议设计

1.天啊,自动生成的.hrl文件

一直找不到一个game.pb文件,然后才发现这个文件居然是自动生成的,这样做的目的是为了确保服务端和客户端使用一样的协议。

2.PROTO是个什么东西?

Proto是个神奇的玩意,通过不一样的编译方式,我们可以方便的通过它来实现将其转化成ERLANG的hrl文件以及AS的文件,其中需要注意的是在写Proto文件的时候,大括号的左边不能出现在单独的一行里,否则会报出错误的。

3.自己的协议

在对MGEE的代码有了一定的了解之后,开始参照组队系统来写自己的协议,整个好友模块通过<<"friend">>来做module通过mgee_router进程来进行转发,而在我自己的好友进程中,我再通过处理不一样的method来把要处理的数据cast给我们的好友进程。

三、编码实现
      1.给自己来一张ETS

好友关系必须要保存起来,有两种方式可以实现,ETS和进程字典,在这里我使用了ETS的方式来保存每个roleid的好友和黑名单。

2.翻出来好多有用的函数

仿照Team模块的一些方式,通过mgee_misc和mgee_role的导出函数,可以通过roleid获得一系列的公共数据,这样就不要自己再单独的去实现,公共的函数能够实现一系列公共的功能。

3.一定要判断数据的格式

导师说过做游戏服务端就是要先对数据进行大量判断后再进行计算,在开始的时候,很多错误都是由于没有对传来的数据进行判断导致的,通过对数据的格式,其内能进行一个判断后,再进行自己想要的操作,这样能够极大的保证程序的健壮性。

四、总结

通过这一次MGEE中好友模块的添加学习,使得我对真正在应用的ERLANG服务端程序有了深入的了解,其模块化的实际方式,其漂亮的协议都是值得我长时间去学习的。

ERLANG学习总结<二>

时间: 2024-08-04 01:51:41

ERLANG学习总结<二>的相关文章

Erlang 学习笔记

http://wenku.baidu.com/link?url=AUQR8Hn-e-fEB_lqjXsd8XfapWj1qAK7J05JoBXFib_LlSk5qSOTia8HIxNV1XkeZi-kHFsH18Qb9NED5PKiPb8h6oDFVR6KG75MUSYAAMm Erlang 学习笔记    一.Erlang语言特征重点  1.catch是返回表达式的值或者错误信息的元组 try…catch是可以捕捉不同的错误类型以及有流程控制  2.发送消息永远不会失败,如果尝试发送消息给一个

ASP.NET MVC学习系列(二)-WebAPI请求

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

javascript基础学习(二)

javascript的数据类型 学习要点: typeof操作符 五种简单数据类型:Undefined.String.Number.Null.Boolean 引用数据类型:数组和对象 一.typeof操作符 typeof操作符用来检测变量的数据类型,操作符可以操作变量也可以操作字面量. 对变量或值运用typeof操作符得到如下值: undefined----如果变量是Undefined类型: boolean-------如果变量是Boolean类型: number-------如果变量是Numbe

Qt Installer Framework的学习(二)

Qt Installer Framework的学习(二) Qt Installer Framework的一些操作可以使用最常见的Qt项目来表示,也就是说,书写pro文件,使用qmake运行之,除了能够编译正常的项目之外,也可以为项目打包.这里最重要的就是binarycreator了.下面就是我命令行使用binarycreator的时候弹出的一些提示,我们可以根据这样的提示,来了解究竟有哪些使用的方法. 上海萌梦信息科技有限公司(微博:http://weibo.com/qtdream)原创文章,首

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

Android学习Scroller(二)——ViewGroup调用scrollTo()

MainActivity如下: package cc.ac; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.app.Activity; /** * Demo描述: * 对ViewGroup调用sc

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己