hulubrother

阅读文章来源  https://www.cnblogs.com/cr1719/p/7430275.html 

 

1.网络通讯

1.1 游戏客户端与游戏服务器的通讯

客户端复杂多变,比如传统页游flash,手机游戏,h5等,所用消息协议不同,但无非是tcp,http,websocket等。

web 端

手游,安卓,ios

客户端

h5小游戏

 

1.2 客户端与服务器约定速成的通信规则

protobuf

xml

json

自定义等

 

2.复杂的线程模型

线程,并发,负载

 

3.跨服、多服的简单解决方案

上面2步实现了单机最简单的消息投递方式,新的问题又来了,如果把网关服,用户服独立开,场景服务器独立开,跨服等如何实现呢?

java多进程之间通讯,看来rpc要派上用场了。游戏这里不比电商等业务,我们所有的服务都是同java语言开发维护,所以一个简单的chen-rpc就可以搞定啦。

rpc具体的实现细节,不作过多讨论。我们实现的最终目标,远程调用,就像本地调用一样的方便即可。

 

4.游戏后台管理系统

简单的前端框架xx抄过来,连ui都不用啦。

http服务,自己写了一个,tomcat都省了,gm指令,web后台登录权限控制,运营客服线上操作等,恩,不用太复杂。

当然,运营让你复杂,还是要搞一搞的。

 

5.游戏静态数据的配置维护

策划经常更改静态表数据,对服务器来说,这种常驻内存的数据,

如果更改一次,服务器重启一次,这样不仅仅是内网测试困难,线上怎么办呢?

5.1首先,策划表数据配置一般都在excel中,这里需要提供一个Excel解析工具,将excel数据,转换成data.dat配置,或者json等,最终生成在服务器项目下的resource

资源包下。

5.2策划更新维护时,通过4的游戏后台,上传data.dat文件,同时重新reload静态资源数据,将java内存值更改 。

 

6.动态数据的更新维护fixme

有静态数据,那必然有要动态更改的数据,这种数据如何落地?会有缓存穿透吗?如果线上有段代码需要更新,怎么办?

6.1目前我接触的几款游戏项目,选用的数据库都是mysql,同时游戏服务器内部有缓存。具体的缓存同步到数据库方式,一般有两种:

  • 阻塞的队列,队列中有数据,就往数据库更新
  • 定时消费,同步数据库

好了,orm开始登场啦。游戏的数据类型简单,表设定更容易,需要事务吗?应该是不需要的。

所以,除了那些大的框架,比如hibernae,jpa,ibatis等,我们可以自己写一个简单的orm,具体参考:apache下的dbUtils

6.2java的一系列因素,决定了动态更新一定不是件容易的事。目前动态更新有多种,具体不作详细介绍。但是,原理无外乎两种:

  • 重写classLoader
  • 关于Agent Main 

 

7.寻路、视野

3d和2d目前我接触的两款游戏设定不一样,具体的我单独分篇来介绍,这里不过多说明。

 

8.游戏日志系统

日志系统很重要,不管是运营正常的数据需求,还是我们程序线上查找问题,日志都是比较完美的解决方案。

具体也不细说了。

 

9.算法+逻辑规则

 

分类:

技术点:

相关文章:

  • 2021-06-12
  • 2021-11-02
  • 2021-10-02
  • 2021-12-17
  • 2021-10-31
  • 2021-05-17
  • 2021-12-22
  • 2021-05-25
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
相关资源
相似解决方案