【游戏服务器开发-准备篇】初识游戏服务器开发

时间:2022-11-12 03:29:20

前言

近期转换了工作方向,从WEB开发走向了游戏开发。
此前的工作中,主要负责WEB分布式项目的开发,REST服务开发,并包含一部分IM系统的开发。分布式系统框架,数据库,NoSql接触的比较多,比较杂。

而新工作比较单一,主要负责游戏服务器的业务开发。使用的也是前辈封装好的框架。后来发现,原来全公司都使用了这一套公共的架构。

相对之前的工作,工作内容接触新技术相对较少。而且,由于公共框架时间久远,现在看一些工具和接口封装已经不是最佳方案。

鉴于此,考虑把前人的*拆掉,好好研究一下。(不得不说,前辈一个人手写的一套Netty+SpringMVC+缓存数据库系统+ORM的服务器架构,屌的不行)

从今天开始,实现一套自己的开源框架,在实现其功能的情况下,争取对前辈的作品进行优化。


游戏服务器与普通WEB容器对比

根据个人经验,游戏服务器和普通的WEB容器,如tomcat,JBoss,Jetty等,存在巨大的差异。而游戏服务器,实际与IM(即时通讯服务器)较为相似。具体对比包含以下方面

一、请求交互方式
  • WEB 服务器
    主要为B/S模式,绝大多数请求是由客户端发起,向服务器端请求数据。

  • IM和游戏服务器
    通常,既需要接受客户端发送的数据和请求,又需要主动的向客户端发送数据。
    而且,由Server到client的情况十分频繁。
    例如,IM需要转发数据给另一个用户、游戏服务器需要将战斗结果发送给两个客户端

二、连接状态对比
  • WEB 服务器
    每个请求其实都是短链接,无状态的。不需要长时间保持一个tcp链路。
    且一个用户的数据请求在短时间内的数量不会太大(相较IM和游戏服务器而言)

  • IM和游戏服务器
    数据发送十分频繁,因此要求每个客户端尽量保证一个tcp长链接。

三、服务器扩展对比
  • WEB服务器
    通过一些CDN、反向代理、负载均衡、增加服务器的方式即可完成。
    因为通常的WEB服务器是http短链接的,因此tcp链路是可以复用的,不会轻易耗尽资源。
    这种方式就可以实现扩展性能。

  • IM和游戏服务器
    由于一台物理服务器的最大TCP连接数的受限的。因此,必须使用多服务的这种方式。(这也是为什么游戏通常具有几K个服务器)
    并且,拆分更多的分布式微服务。

  • IM和游戏服务器
    数据发送十分频繁,因此要求每个客户端尽量保证一个tcp长链接。
四、业务操作对比
  • WEB服务器
    复杂计算少、IO密集但读多写少。

  • IM和游戏服务器
    复杂计算多,因此计算密集,IO密集,且读写都频繁。

五、使用Netty构建高性能服务器的优势
  • 便于分布式微服务部署
    一个游戏服务器系统,通常不是一个netty服务构成的,而是由独立的地图服务器、登陆服务器、逻辑服务器等组成。
    基于Netty的NIO可以较好的处理系统之间的网络通信,性能较好。

  • 支持多协议
    Netty支持多种协议,编码灵活。通过使用protobuf可以实现适应多种游戏场景的协议和私有协议编码。
    如在IM中,如果进行视频传输,我们可以使用UDP协议。进行文件传输,我们可以使用TCP传输。对于传输协议的格式,也可以使用Protobuf实现。

  • 可配置TCP连接数线程池
    可以提高差异化控制能力。
    提供基于TCP的长链接,可以满足游戏服务器长时间保持连接的需求,同时具有心跳机制保活和检测链路。