站务联系

选择Skynet+Redis+Mysql作为游戏服务器框架

发布时间:2021-03-17   来源:网络整理    
字号:

一个人做游戏,服务器的开发也就成了必定的事情

选择服务器框架Skynet

选择skynet的成因不仅仅是因为云风是我的偶像,也有一下几个成因

配置开发环境

本人用mac开发,windows建议安装Linux虚拟机进行开发

配置 Skynet配置 Mysql下载Mysql

$ brew install mysql

启动Mysql

选择Skynet+Redis+Mysql作为游戏服务器框架

方案一

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '831015';
FLUSH PRIVILEGES;

root是用户名,localhost是ip地址127.0.0.1都是特指本机,mysql_native_password是旧的密码验证模式,831015是密码,最后别忘了分号;

运行testmysql.lua 链接成功

方案二

修改mysql配置文件:

[mysqld]
default_authentication_plugin=mysql_native_password

Redis 和 Mysql数据同步方案整体思路

选择Skynet+Redis+Mysql作为游戏服务器框架redis中进行游戏服务器,断线后进行落地

Mysql表设计与必要信息

1.  user //id自增的角色信息,用来标识玩家
2.  money //主键为user id 做游戏,货币是必须的
3.  snode //记录服务器信息,包括版本更新迭代信息
4.  role //一人多号,id自增
5.  item //主键为role id 

Redis表设计与Mysql映射

redis数据使用hashmap储存与sql表的关系,以表名+分隔符+数据惟一id作为key来储存

譬如说这条信息'role':${uid}:${rid},其中role为代表role表,${uid}代表此玩家uid作为可变参数${rid}作为此角id可变参数,玩家使用uid与rid作为逻辑参数,服务器查询redis库进行查询验证操作

实现方法

因为要更改redis表甚至将redis中的数据落地至Mysql中,所以要提高必要的格式检测以免程序操作失误导致意外

选择Skynet+Redis+Mysql作为游戏服务器框架

SignInServer

路由保存在watchdog中,每个客户端连结后分配一个地理SignInServer服务器(可以本机,取决于自己),处理客户端连结握手部份,使用状态机进行状态驱动,处理客户端socket连结后数据,设置好超时时间,处理注册跟手动登入逻辑

DaoServer

负责客户端上线后的MySql数据拉取至Redis与掉线后Redis的落地至MySql操作

LogicServer

负责游戏逻辑,玩家状态通过打听agent获取处理,如果是复杂打法(如多人副本)可以新增一个有状态服务进行拓展,不过有状态服务要分布式的话要维护好与agent的连结关系

结束语

耗时三个月零零散散总算把自己的服务器部份完整了(。)ノ,已经开始做小游戏了,使用Unity,有完整的热更步骤,有完整的服务器部份,程序只有我自己,光杆司令,确实是比较累的,不过我会坚持的。万一财富自由了呢

ε=ε=ε=( ̄▽ ̄)

图说天下

×
二维码生成