首页 > 代码库 > ERLANG学习总结<二>
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服务端程序有了深入的了解,其模块化的实际方式,其漂亮的协议都是值得我长时间去学习的。