网站配置服务Wordpress,深圳英文建站公司,创建微网站,佛山网站建设专家评价本文首发在这里 重中之重就是想实现无锁#xff01;无锁#xff01;无锁#xff01;
源码
servergolang
预计还会实现gate_server#xff0c;接受并保持websocket长连接#xff0c;按需双向流到game_server进行消息转发
未来上述服务均会以容器的形式由k8s自动化部署、…本文首发在这里 重中之重就是想实现无锁无锁无锁
源码
servergolang
预计还会实现gate_server接受并保持websocket长连接按需双向流到game_server进行消息转发
未来上述服务均会以容器的形式由k8s自动化部署、扩展、管理
实现简单示例自创的骰子游戏
服务端
cd ~/go/src/github.com/panshiqu/server/game_server
go run main.go客户端
cd ~/go/src/github.com/panshiqu/server/game_server/game/dice/client
go run main.go -u1 -r1 -seat-1 -namedice -autofalse -printfalse
# 输入 shake 或 print# go run main.go -print
# 以上展示两种安全打印内存的方式请查看主要对象的接口若是能从命名、注释、查看引用就能很快理解的下面大概率是不赘述的
游戏主要接口调用时机
Init(IRoom) error房间创建初始化时调用失败会导致房间创建失败Reconnect(IUser)连接即坐下用户已在此房间有座SitDown(IUser)连接即坐下用户首次进入此房间StandUp(IUser, int) bool断开即站起或其它譬如游戏结算后站起离线用户OnDisband(int64)停服解散所有房间或其它譬如游戏结算后房间因无人而解散
框架开放的个别接口赋予游戏的能力 room.Disband()直接对房间发起解散 user.Disband()借用户发起解散其所在房间 user.Disconnect(int)主动断开客户端连接 user.StandUp(int)站起用户 user.SetData(any)为用户设置任意数据 room.Send[Pb]支持排除部分用户
核心设计
连接即坐下断开即站起游戏可以拒绝站起将视为离线框架负责识别重连全局错误码pb.ErrorResponse即错误返回错误即回复开发环境错误回复填充调用路径框架为适应各类游戏仅负责必要逻辑基本不校验游戏的调用不集成用户准备、房间游戏状态等逻辑好用的定时器模块支持添加重复定时、定时器支持重置、停止、获取剩余时间并发亦可安全
简单说明
指定数量config.Seat座位以外是旁观席且会自动扩容游戏在用户落座后检测到不符合准入条件可调用旁观接口待实现将用户移到旁观席框架因房间已满用户落座旁观席待有座时游戏可调用换座接口待实现将用户移到可游戏座位用户在A房间却想进B房间创建却无人进的B房间当前是懒解散建议游戏实现逻辑解散不活跃的房间gate_server收到game_server的pb.Cmd_Disconnect会调用stream.CloseSend来允许GracefulStop
关于匹配待实现
当前进入游戏必须携带房间编号未来会实现match_server微调雪花算法来生成房间编号基于规则优先返回已有的房间金币场实现打立出局、定局积分等赛制比赛场考虑扩展game_server支持未携带房间编号的单服匹配小微游戏敬请期待实现后再来阐述更多细节
写在最后
写代码的时候太多想写进博客确实也有备忘最后复看代码还是不要啰哩啰嗦啦基于此刻源码成文代码大概率会继续完善也会尽量同步更新此文但话不绝对
关于游戏不停服更新的补充文字说明请看这里代码修改请看这里