本文主要针对TCP游戏游戏的设计,例如棋牌,桌游,回合制等。
长话短说,分别介绍一下需要用到的框架及技术:
netty 一款高性能底层框架封装大量易用协议支持
protocol buffer 所转换二进制流是最少的,也就是相对json省流,速度快
rocketMq 采用阿里消息队列,经过双11洗礼,性能和速度毋庸置疑速度ms级别
mybatis 做数据的持久化
redis 数据缓存
spring boot 做为管理员
游戏框架前沿,组成部分
网关+逻辑 架构分层
网关:主要用于存储用户的通道,简单逻辑过滤 通常n台
逻辑服务器:通常n台,负载均衡处理
作为中间件,mq用来消息转发,比如用户请求房间,相应的房主就得马上收到,流程是a用户发送tcp请求网关->网关接收到命令去趟逻辑服务器,接着逻辑服务器处理完->向N台网关广播发送消息,网关接收到推送的消息找到对应主播,如果网关1没有找到主播通道就不做处理,假如网关2有主播通道就用网关2推送给主播。像取用户信息之类的可用restTemple或者dobbo等调用,可以不用mq广播,mq只是消息广播之类的。
实现前n多个疑问:
疑问1:网关到底干啥用,还要不要像ngix做转发http那样
答:可以不需要,通道直连模式,自己控制好通道链接负载,断线机制,主要用户维护用户tcp等链接
疑问2:netty通道不能存redis怎么办
答:存网关内存里面
疑问3:这种用mq是否有点曲径救国,时效性如何
答:mq是游戏分布式部署的跨服通讯的桥梁,你完全可以用一台机子全写一起,但是维护性差,一台挂了影响用户使用。在网关和逻辑交互的局域网下传输速度几乎1ms内通讯完,完全不用担心实时性问题。
注:以上在方式架构游戏项目已线上运行
网友评论