大致结构已介绍完毕,剩下就是谈谈消息队列的坑和测试。
最先设计并没有消息队列,只是单纯的大厅作为中心点,到后来需要可动态扩展,如果各个服务器数量增加每个服务器需要与剩下的服务器进行连接,如果服务器个数N个以上单个服务器需要维持N-1个连接,耗费系统资源。如果有消息中转服务器,则每个服务器只需要维持一个连接并降低编码难度。
开始是手撸一个基于grpc双向流的服务器,性能还行但是毕竟手撸,如果横向扩展肯定会有许多问题。后来使用了NSQ,NSQ是使用Go语言编写的开源项目,但是使用的过程中不知道为何延迟十分大,本地一个程序放入信息到另一个程序去除信息,中间耗时再1ms~100ms左右,由于其文档较少只能换成rabbitmq,最后测试延迟再1ms~3ms之间,并且rabbitmq支持消息过期,因此消息队列选择rabbitmq。
由于没有前端,选择QT作为客户端并从网上扒了皮弄成在线多人贪吃蛇,实现了登陆、进入房间、游戏。