1、TCP ,UDP ,KCP ,QUIC
TCP 协议最常用的协议
UDP协议非常规的协议,因为需要在线广播,貌似运营商会有一些影响
KCP 基于UDP的协议,GitHub - l42111996/java-Kcp: 基于java的netty实现的可靠udp网络库(kcp算法),包含fec实现,可用于游戏,视频,加速等业务,暂时看中了这个,后面研究下。
QUIC 谷歌基于UDP的协议,实现过于厚重,放弃
基于UDP被运营商管制的原因,暂时先用选择TCP
2、架构设计
架构设计基本上还是常规的房间服 做所有的战斗逻辑
game服,承载常规的业务逻辑
为了能多承载一些用户,可以增加一个gate服,承载连接
中规中矩,没什么亮点
3、设计细节
3.1 游戏架构大纲
服务端技术底层:Springboot + Netty + Disruptors + Akka + protobuf
移动逻辑使用帧同步,同步频率 60/s ,可适当降低频率
客户端可以做一些预测移动
房间内移动的对象有,玩家,敌人,子弹等,可以抽象出一类移动的物品
其他的战斗逻辑可以使用状态同步
3.2 游戏通信流程
登录流程:
客户端连接gate服务器之后,远程调用Game服登录,加载玩家数据到内存
通信流程:
客户端发送消息到gate服之后,Gate根据消息类型转发到对应的服务器,如果是Game服的消息转发到Game,否则转发到Room服
战斗流程
线上匹配进入向Room服发送创建请求,创建完成之后同步玩家数据到room服,并设置room为ready状态,发送个客户端,接着进入战斗状态