![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Erlang
文章平均质量分 66
Wengs95
一往无前
展开
-
mongodb-erlang文档阅读+源码解析
mongodb-erlang 是一个非官方的MongoDB客户端,提供了Erlang语言版本的MongoDB驱动。本文旨在通过对其文档和源码的分析探索其使用方法,解析其工作方式。原创 2020-12-07 20:12:05 · 947 阅读 · 0 评论 -
Erlang代码重构指北——基于自动重构工具Tidier的工作方式
0. 简介Tidies是一款重构Erlang代码的软件,不过现在官网已经打不开,而且软件本身没有开源,所以并不能用了。在网上找到一篇介绍tidies工作方式的论文,从中能整理出一些重构Erlang代码的方法,在此记录如下。原文链接:https://users.ece.cmu.edu/~aavgerin/papers/PPDP09.pdf相关的PPT:https://www.erlang-factory.com/upload/presentations/121/KostisSagonas-Erlang原创 2020-09-17 14:11:54 · 474 阅读 · 0 评论 -
英雄远征Erlang源码分析(13)-总结 附上可执行的服务端和客户端代码
总结:其实也没有什么好总结的......英雄远征这套源码虽然说体积并不大,麻雀虽小五脏俱全,对于MMORPG网游的一些基本系统都有完备的实现,虽然实现方法不一定是最好的。除去场景,战斗,组队,任务等那些我文章中有提到的系统,源码中还有像是帮派,邮件,坐骑,宠物,排行榜相关的模块,有兴趣的同学可以自己去看看。游戏中还有几个比较重要的系统,感觉还是要提一下:1.心跳包系统:客户端会以指定时间间...原创 2019-03-31 20:55:01 · 2297 阅读 · 1 评论 -
英雄远征Erlang源码分析(11)-物品相关操作解析
游戏中,玩家物品的管理是通过每个玩家独有的物品管理进程,结合ETS缓存表实现的。物品相关模块有mod_goods.erl,lib_goods.erl,goods_util.erl和lib_make.erlmod_goods.erl:物品管理进程模块,负责创建进程,进程内接收消息并调用相关操作。lib_goods.erl:负责物品的发放和删除,物品属性修改,背包内物品更改(物品堆叠处理),...原创 2019-03-27 11:47:11 · 443 阅读 · 0 评论 -
英雄远征Erlang源码分析(12)-任务模块解析
与玩家任务相关的模块有:lib_task.erl(玩家任务相关操作),mod_task.erl(定时回写任务数据)玩家任务的初始化:在登录的时候调用lib_task:flush_role_task(PS),从数据库中加载玩家角色数据玩家任务数据分为可接的任务,已接取的任务(task_bag)和已完成的任务(task_log)任务的基本操作:1.获取可接任务(接取任务条件),已接...原创 2019-03-29 15:41:57 · 487 阅读 · 0 评论 -
英雄远征Erlang源码分析(9)-战斗流程解析
和战斗相关的模块有mod_battle.erl当玩家进程和怪物进程被创建的时候都会通过mod_battle:start_link()创建一个战斗进程。该战斗进程的state,用于保存玩家上次出手或者使用技能的时机,用于cd的判断-record(state, { last_attack_time=0, % 上次出手时间 last_skill_time...原创 2019-03-16 14:16:27 · 3377 阅读 · 1 评论 -
英雄远征Erlang源码分析(8)-怪物相关
与怪物相关的模块有三个:mod_mon_create.erl,mod_mon_active.erl,lib_mon.erlmod_mon_create:创建负责创建怪物的进程,通过mod_mon_create:create_mon([MonId, Scene, X, Y, Type])创建怪物进程怪物创建进程的state-record(state, {auto_id}).用于保存怪物的自...原创 2019-03-15 18:00:46 · 2082 阅读 · 0 评论 -
英雄远征Erlang源码分析(7)-场景与副本
场景和副本是玩家活动的区域,场景在服务器启动的时候由mod_scene进程创建,场景信息保存在?ETS_SCENE中,并一直存在;副本在玩家请求进入的时候会创建副本服务进程,当玩家离开的时候会撤销进程。场景:场景相关的模块为mod_scene.erl和lib_scene.erl,场景的基本要素:怪物,NPC,mask(包含场景可移动坐标信息),它们在场景初始化的时候被加载。场景初始化...原创 2019-03-15 15:49:26 · 824 阅读 · 0 评论 -
英雄远征Erlang源码分析(6)-玩家进程初始化和玩家模块相关方法
客户端发送登录请求后,服务器检查玩家登录需求,创建玩家进程以及进行相关的初始化工作,只有这些做完后,客户端操控的角色才算是和服务器的玩家进程建立了关联。创建玩家进程调用mod_player:start/1,使用process_flag(priority,max)将进程优先度设置为最高,返回玩家进程的Pid。登录检查通过,调用mod_login:login_success/4,初始化玩家内存...原创 2019-03-04 17:59:50 · 713 阅读 · 0 评论 -
英雄远征Erlang源码分析(5)-协议解析与玩家登录处理
现在,客户端与服务器的连接算是正式建立了,此时用户需要做的第一件事就是登陆。不过在登录之前,我们要先研究下前后端通信的协议。客户端与服务端建立连接后,通过提前制定好的协议进行交互。具体的协议文档在doc文件夹下。典型的协议结构如下(此处为用户登录的10000协议):*** 协议说明 ***1.协议号由5位数字组成,前两位表示协议分类(主要用于区分不同的功能模块),后三位是该分类下...原创 2019-03-04 17:03:22 · 1256 阅读 · 0 评论 -
英雄远征Erlang源码分析(4)-TCP连接处理
上一篇文章大概捋了一下游戏服务器启动的时候对应模块的动作,现在我们来仔细研究一下其中的start_tcp/0和start_client/0部分。在start_tcp/0中启动了sd_tcp_listener_sup监控树,并挂到sd_sup下。其后启动的进程树形关系如下:这是游戏服务器启动后使用observer观察到的游戏内进程关系图,<0.68.0>为start_tcp/...原创 2019-03-04 16:17:41 · 924 阅读 · 1 评论 -
英雄远征Erlang源码分析(3)-游戏服务器的启动
上一篇文件介绍了网关服务器的启动,其功能主要用于给客户端返回可选的游戏服务器列表,让客户端去连接。其实有些游戏的网关部分使用的是PHP搭建,代码的维护和Erlang是分开的。现在让我们来看游戏服务器的部分。同样,找到script文件夹,运行run.sh,即可启动游戏服务器(先确认游戏的数据库和相关的表已建立,通过运行sdzmmo.sql文件)。脚本里的启动参数和一些解释: +P 1...原创 2019-03-04 15:22:13 · 1140 阅读 · 0 评论 -
英雄远征Erlang源码分析(2)-网关服务器的启动
上一篇文章解析了游戏源码的结构,我们知道该源码包含两个服务器的启动脚本:网关服务器和游戏服务器,其中网关服务器用于在玩家选择进入游戏服务器之前获取服务器列表,游戏服务器则处理玩家进入游戏服务器后的登录,进入游戏操作。先来说说游戏的网关服务器部分的启动过程,和网关服务器相关的代码为sd_gateway_xxx.erl。运行script/gateway.sh文件,从sd:gateway_sta...原创 2019-03-04 11:51:43 · 1276 阅读 · 0 评论 -
英雄远征Erlang源码分析(1)-源码结构解析
偶然得到了一份英雄远征的Erlang服务端源代码,想着通过对源代码的分析,来熟悉使用Erlang编程语言的游戏服务器的设计,游戏中关键逻辑的实现。 解压压缩文件后,在Idea内导入文件夹创建相关工程,可以看到文件结构如下: doc:协议文档 ebin:保存编译后的ebin文件,由于是启动目录,所以也包含了gateway.app,server.app...原创 2019-03-04 09:52:50 · 2304 阅读 · 3 评论 -
MochiWeb使用+源码分析资料整理
毕业了好一段时间了,现在回头看自己的校招经历的话实在说不上成功,重视程度不够+准备不足,没能和同学一样拿到一个光鲜的offer,现在也已经参加工作了半年了,回头感慨再多也没有用,从今往后还是脚踏实地认真努力的工作,保持饥渴状态不断学习,苦练内功,为日后做准备,毕竟,未来的事情谁知道呢。 参加工作后使用的编程语言是Erlang,虽然不及java,python和c++之类有热度,但其设计哲学...原创 2018-11-25 22:41:24 · 314 阅读 · 0 评论