erl +P 1024000 +K true -smp disable -name sd2@127.0.0.1 -setcookie sd2 -mnesia extra_db_nodes ["'sd1@127.0.0.1'"] -boot start_sasl -config log  -s sd gateway_start -extra 127.0.0.1 5566 0

+P 1024000 erlang节点系统的最大并发进程数;
+K true | false 是否开启kernel poll,就是epoll;
-smp disable SMP 多处理器
-name -name Name 给一个erlang节点/进程设置一个名称
-setcookie Cookie 给节点设置cookie
-mnesia extra_db_nodes  当无盘节点需要从网络上的一个远程节点找到schema定义,则我们需要从-mnesia extra_db_nodes
-boot File   指定启动使用的boot文件,默认是$ROOT/bin/start.boot,在这个目录下还有start_clean.boot,start_sasl.boot。如果需要sasl的话,就“-boot start_sasl ”;
-extra 参数
-s Mod [Func [Arg1, Arg2, ...]]
-config Config 指定配置文件,这个是很有用的

调试宏
 -ifdef(debug).-define(LOG(Msg,List), io:format(Msg,List)).-else.-define(LOG(Msg,List), ok).-endif.

启动:
1.script/
gateway.sh -->sd.erl -->gateway.app
-->sd_gateway_app.erl 
%% 启动数据库mysql
%% 启动超级监听sd_gateway_sup
-->sd_gateway_sup.erl
-->sd_gateway.erl
stop: %% 组合主进程的名字 %% 找到这个进程  %% 杀死这个进程
start_raw_server:%% 组合进程名字 %% 查找是不已经存在  %% 创建一个进程负责监听gen_tcp:listen
,mod_disperse.erl
-->sd_gateway_server.erl
start_raw_server开启TCP_SERVER
1.开启一个进程负责code_start-》gen_tcp:listen成功就发送一个消息回到父进程注册进程名字,再开启一个等待连接进程
2.如果gen_tcp:accept成功连接上就发送给父类一个消息istarted再开启另外一个

mod_disperse 线路分布
1.net_kernel调用这个方法来订阅节点状态变动的消息,分布式节点
2.ets 保存服务器节点 
3.节点之间互相通知

run.sh
sd.erl -->server_start-->server.app-->sd_server_app.erl
-->sd_sup.erl,sd_networking.erl
sd_sup 
1.监控树
sd_networking
start:启动需要的一些子监听
mod_kernel
1.初始化ets表缓存
2.%% mysql数据库连接初始化
3.初始化表数据,就是需要读取的数据到ets表

start_disperse 线路分布,集群
1.net_kernel:monitor_nodes 节点订阅
2.建立ets 表保存server路线 集群信息,以后和其它线路有关的广播都经过它传递
3.加入到集群写到数据库,遍历ping同所有节点,通知其它节点它的加入和信息   不解:数据库开始怎么存在Nodes,后面无法ping???

mod_rand随机种子
sd_tcp_client_sup客户端监控树  
-->sd_reader
1.启动一个普通进程 login_parse_packet解析登陆

用来监控每个connection的处理进程

sd_tcp_listener_sup 监听树
-->sd_tcp_acceptor_sup 等待连接监听
sd_tcp_acceptor

sd_tcp_listener
tcp_listener里启动tcp服务器,监听端口,并且通过 tcp_acceptor_sup启动N个tcp_accetpor

TCP层:
  server.app通过application:start()-->sd_server_app启动sd_sup顶级监听,sd_networking启动各种子监听(注意只是启动子监听不是启动子监听里面的监听或者工作者)-->sd_tcp_client_sup,sd_tcp_listent_sup-->sd_tcp_listener_sup启动sd_tcp_accepte_sup监听,和sd_tcp_listener它里面启动网络监听Listener成功之后启动10个accepte等待连接,主要有一个连接上了就绑定socket启动一个sd_tcp_client_sup的子工作者sd_reader接受消息,同时再启动一个accetp等待连接。采用的是异步和广播。

sd_read.erl-->
  1.做个沙河验证
  2.登陆处理使用异步接受格式Len+Cmd+data,len是16位比特位就是两个字节,Cmd同样,所以头就是4个字节。验证头后就取得后面的数据data,先通过routing把数据解析处理    [H1, H2, _, _, _] = integer_to_list(Cmd),
    Module = list_to_atom("pt_"++[H1,H2]),([]本身就是list)
    3.%%先验证登陆在里面加入MD5验证码,同时使用Client的record记录下登陆情况再放回等待数据
    4. %%读取玩家列表
    5. %%创建角色
    6.%%删除角色
    7.%%进入游戏-->do_parse_packet 处理以后的逻辑
mod_login:login(start, [Id, Client#client.accname], Socket)
先检查是否在线(不明白它的检查)-->检查通过写入登陆时间--->登陆成功
-->分别启动各种模块并且初始化他们,再初始化mod_player,写入ets缓存状态,上线之后的一些处理例如:通知好友等

erlang游戏源码--英雄远征分析相关推荐

  1. 浅谈erlang游戏服务器项目--英雄远征服务启动流程

    1.看代码结构我们知道启动脚本run.sh,看脚本中的-s sd server_start我们知道启动接口在sd.erl的server_start函数. 2.我们打开sd.erl找到server_st ...

  2. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----01-----主角人物动画

    在源代码的里面有fbx格式的模型文件,发现有2个文件,一个是骨骼动画文件,可以分割为多个动画片段,还有一个是模型文件,但是没有动画,但是可以导入分割好的动画片段到动画元素里面, 按照下面的说明,分割了 ...

  3. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单窗口

    Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单Shop窗口 此脚本用于创建商店以销售商品 --------------------------------- ...

  4. 《游戏学习》| 微信蜘蛛侠动作游戏源码分析

    整个游戏源码是由html.js. css.图片等代码完成的,无后端数据保存功能. 代码结构 js文件夹是游戏事件控制文件 vapp文件夹是游戏图片文件 icon.png 是网页游戏图标 index.h ...

  5. 《游戏学习》| 水果忍者HTML5网页版在线游戏 | 源码分析

    游戏介绍 这是一款由百度JS小组提供的HTML5版切水果游戏,这款基于HTML5实现的网页版切水果游戏虽然和原版的切水果游戏相比仍有美中不足之处,但也算有声有色,画面效果也十分炫目华丽. 游戏截图 主 ...

  6. [erlang]proc_lib源码浅析

    源码位置位于安装目录的lib/stdlib/src下. 之前在使用gen_server时,由于之前自己实现过一个gen_server,因此对它内部的机制也能知道个七七八八,最近在用erlang的fsm ...

  7. 15款Cocos2d-x游戏源码

    (1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象棋游戏,游戏中可以实现.新局面.悔棋.游戏音乐.胜利后会显示游戏结果. 源码下载:http://www ...

  8. 15款Cocos2d-x游戏源码 1

    转自:http://blog.okbase.net/iphone/archive/4619.html (1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象 ...

  9. Cocos2dx游戏开发笔记22:以仿《王者之剑》游戏源码为例,学习cocos2dx2.X到 3.0beta2 的升级(附源码)

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 青岛) 原贴在此:http://www.9miao.com/thread-45434-1-1.htm ...

最新文章

  1. LoaderManager使用具体解释(三)---实现Loaders
  2. [pyinstaller] “RuntimeError: No metadata path found for distribution ‘greenlet‘
  3. MySQL — 优化之explain执行计划详解(转)
  4. VC++之自定义消息
  5. [转]jkeyll的安装步骤
  6. 多态_月隐学python第18课
  7. typecho 去掉index.php,Typecho设置伪静态去掉url中的index.php
  8. 解决Wireshark安装Npcap组件失败
  9. 9个完整android开源app项目
  10. java -jar 命令隐藏黑窗口
  11. vum安装mysql_Vue自动化工具(Vue-CLI)的安装
  12. 计算机里的游戏怎么输入,如何输入对号(对号怎么打?电脑上和手机分别怎么打?)...
  13. ElasticSearch Cause: Cluster state has not been recovered yet, cannot write to the [null] index
  14. 数据泄露事件频发,深扒企业数据库安全隐患(内附高效防护手段)
  15. 这些都是成为高薪运维必备的 Linux 技能,你具备了吗?
  16. mysql越权漏洞_Fortify漏洞之Access Control: Database(数据越权)(示例代码)
  17. cognos 是什么?
  18. vue 前端生成二维码,并转换为图片
  19. electron-v8.2.1-win32-x64.zip 下载失败(npm install electron 安装失败)
  20. 纳什均衡前提_博弈论 纳什均衡

热门文章

  1. 中国石油大学《计算机应用基础》第二阶段在线作业
  2. SkeyeVSS矿山采盗监控系统智能化管控非法采矿解决方案
  3. 蚂蚁金服高级前端专家,我做前端这 10 多年来的感悟
  4. 百度笔试题面试题集总
  5. HDU 1574 RP问题(DP)
  6. VC++ cpp-httplib
  7. 2020码农干货铺(原SAP干货铺)公众号文章清单
  8. 【高效工具】《三》Typora直接使用MarkDown语法绘制流程图、时序图、甘特图
  9. 自己编译安卓系统实践
  10. 详解ISO13400文档-2