一个人做游戏,服务器的开发也就成了必定的事情
选择服务器框架Skynet
选择skynet的成因不仅仅是因为云风是我的偶像,也有一下几个成因
配置开发环境
本人用mac开发,windows建议安装Linux虚拟机进行开发
配置 Skynet配置 Mysql下载Mysql
$ brew install mysql
启动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数据同步方案整体思路
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中,所以要提高必要的格式检测以免程序操作失误导致意外
SignInServer
路由保存在watchdog中,每个客户端连结后分配一个地理SignInServer服务器(可以本机,取决于自己),处理客户端连结握手部份,使用状态机进行状态驱动,处理客户端socket连结后数据,设置好超时时间,处理注册跟手动登入逻辑
DaoServer
负责客户端上线后的MySql数据拉取至Redis与掉线后Redis的落地至MySql操作
LogicServer
负责游戏逻辑,玩家状态通过打听agent获取处理,如果是复杂打法(如多人副本)可以新增一个有状态服务进行拓展,不过有状态服务要分布式的话要维护好与agent的连结关系
结束语
耗时三个月零零散散总算把自己的服务器部份完整了(。)ノ,已经开始做小游戏了,使用Unity,有完整的热更步骤,有完整的服务器部份,程序只有我自己,光杆司令,确实是比较累的,不过我会坚持的。万一财富自由了呢
ε=ε=ε=( ̄▽ ̄)