skynet笔记

资源地址:---------------------------------------------------------------------

https://github.com/sanikoyes/skynet/tree/vs2013


skynet地址: https://github.com/cloudwu/skynet

云风skynet博客:http://blog.codingnow.com/eo/skynet/







编译vs2013项目的pbc及lua绑定:
添加工程到vs2013的skynet项目中
将项目改名为protobuf
将3rd\pbc-master\binding\lua53\pbc-lua53.c添加到工程中
参照其它dll库项目设置输出为dll,扩展名为.so
添加protobuf.def并设置模块定义文件为protobuf.def
在protobuf.def中设置导出函数luaopen_protobuf
设置:右键选择pbc项目->右键菜单选择工程属性->通用属性->引用->添加新引用->选择lua53->确定
将编译出的protobuf.so复制到luaclib下
将3rd\pbc-master\binding\lua53\pbc-lua53复制到lualib目录中








linux编译部署:(centoros7)
下载skynet源码(git clone https://github.com/cloudwu/skynet.git)并解压,编译:make 'linux'
报错:依赖git
解决:装git
报错:依赖jemalloc
解决:下载jemalloc:https://github.com/jemalloc/jemalloc,保存到skynet/3rd/jemalloc/
报错:依赖autoconf
解决:安装autoconf:configure make make install
出错:configure: error: no acceptable m4 could be found in $PATH.
解决:安装m4
wget -O m4-1.4.9.tar.gz http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9
./configure
make
make install
出错:Can't locate Data/Dumper.pm in @INC (@INC contains:
解决:yum install 'perl(Data::Dumper)'
报错:lua.c:83:31: fatal error: readline/readline.h: No such file or directory
解决:下载readline:ftp://ftp.cwru.edu/pub/bash/readline-7.0.tar.gz,configure make make install
运行测试:./skynet examples/config






skynet框架:---------------------------------------------------------------------
skynet.pack/unpack:
pack(...) 用默认的 lua 类型打包一个消息,返回可供内部调用的指针和长度。
packstring(...) 用默认的 lua 类型打包一个消息,返回一个 lua 字符串。
unpack(msg [, sz]) 将 pack 或 packstring 打包的消息解包,若没有 sz 则 msg 必须为一个 lua 字符串 。
tostring(msg, sz) 将一个指针和长度定义的消息包转换成一个字符串。
netpack.pack/filter/tostring:
2字节长度+包内容格式打包和解包
string.pack (fmt, v1, v2, ···)
返回一个打包了(即以二进制形式序列化) v1, v2 等值的二进制字符串。 字符串 fmt 为打包格式(参见 §6.4.2)。











游戏框架:---------------------------------------------------------------------
在mysql中创建3个数据库, 分别是center, game, gamelog
harbor     = 0      --0-单点 1-master slave
使用cluster+单节点架构模式


main_db服务:一个redis_serv服务池
mysql_db服务:一个mysql_serv和mysql_log_serv服务池



服务器类型
1. 网关服。 客户端入口点, 数据转发。 数据包解析等


2. 协调服。 管理所有游戏房间的服务器


3. 登陆服。 负责验证用户的有效性


4. 房间服。 游戏逻辑服务器,
1) 按应该场景分: 金币房, 私人房(房卡),比赛房等。  第一版实现 私人房功能
2) 每类场景分游戏:  麻将、牛牛、斗地主等。  
3) 各游戏又可以开设多个房间。 
如: 麻将1号金币房,  麻将2号金币房…  
麻将1号私人房, 麻将2号私人房…  
麻将比赛房…

房局基本流程:
1. 玩家登陆游戏: 获取玩家的个人信息、游戏房间列表(房间ID、房间类型、游戏类型等数据)
2. 玩家创建房间: 根据请求创建的游戏类型, 选择房间服(同类型游戏房间会有多个的情况,需要做负载均衡)->创建游戏桌子TABLE -> 选择位置(坐下)
3. 玩家加入房间:  根据房间号,选择对应的房间服->查询空位置->坐下
4. 满足游戏要求,  如果3人房,只有三个玩家进入房间并准备好,即开始游戏。
5. 游戏过程
6. 游戏结束, 通知玩家游戏结束, 将需要修改的玩家信息更新到数据库。 并等待玩家准备下一局游戏。 所有玩家都准备好后,重复 4-6步操作
7. 房局结束判断. 根据设定的总局数为判断条件,完成的局等于总局数,第6步不在继续下一局,发送局结算消息。 并将房间内的所有玩家 起立,及执行离开房间。

这里房卡模式, 金币, 比赛。 基本上都差不多的流程




负责对外连接,和解码后根据命令分发到其它进程的的是gate_server。
center_server监控所有结点,gate_server要根据它的监控结果取到可用的结点。
其它的server都是业务级别的server,没有什么特殊性。
这套源码是分布式部署的,也可以布在同一台机器上
---------------------------------------------------------------------------------------------------------










































问题列表:
启动异常:可能是重复启动了两个进程
协议报错:可能因协议修改了未重新make
客户端连接不上服务器:服务器有另一个进程未真正退出,可通过监听端口查询是否仍有监听网关服监听端口
启动后短时间内未报错但感觉未启动完全:可能数据库连接失败,是否mysql未启动?或数据库服务器ip地址有变?不可访问
启动后屏幕看不到信息:可能日志服务启动失败,配置文件中luaservice值是否包含了日志服务所在路径,另外,日志服务中是否require了未包含在lua_path范围内的文件,可以在日志服务文件里用print函数来跟踪调试
能看到少量日志信息,可能为端口被占用,通过命令排除所有skynet需要使用的端口(主要为config文件中及我们程序自己私有的端口)是否被占用,windows下命令为:netstat -ano|findstr <port>
注意:config中standalone和master如果被使用,则其ip(0.0.0.0包含具体ip)及端口号必须一至
查内存问题:
云风:
https://github.com/cloudwu/skynet/issues/682 
定义 MEMORY_CHECK https://github.com/cloudwu/skynet/blob/master/skynet-src/malloc_hook.c#L13 
以及定义 LUA_USE_APICHECK https://github.com/cloudwu/skynet/blob/master/3rd/lua/luaconf.h#L696-L702 
然后再查。
杭州-Roc:
我之前弄过一个处理单个 lua_State crash时的栈处理
https://github.com/rocaltair/lua-coredump 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值