从零开始搭建游戏服务器框架
文章平均质量分 86
java游戏服务器架构与经典业务思考。
本栏目从消息网关开始,到游戏线程模型,业务逻辑开发,游戏管理工具等,一步一步讲解游戏服务端的搭建,运转流程,以及一些常规业务的设计讨论。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
jforgame
技术爱好者,资深服务端开发,对游戏服务器开发有深入的研究。
喜欢Java,Go,Python等语言。
开源游戏服务器框架https://github.com/kingston-csj/jforgame。
展开
-
jforgame-doctor快速入门
对于一个上线产品项目来说,热更新为维持项目的稳定健康提供了坚强的保障。小到策划数据的修改,代码bug的修改,大到动态扩展游戏业务功能。本文主要介绍java两种热更机制的原理,以及利用jforgame-doctor进行代码演示说明。原创 2024-04-01 09:09:26 · 220 阅读 · 0 评论 -
jforgame-socket快速入门
jforgame-socket是一个通用的网络工具,底层对Netty/Mina进行了封装,屏蔽了私有协议栈定制,消息编解码,消息粘包/拆包问题。jforgame-socket传输层使用了TCP协议。可用于任何需要socket通信的应用。例如游戏服务器,聊天服务器等等。原创 2024-03-26 18:28:53 · 303 阅读 · 0 评论 -
网游版五子棋
五子棋游戏属于开房间类休闲游戏,可以非常方便实现分布式战斗服横向拓展。只要服务器有压力,就可以通过动态加战斗服服务器来实现。本文介绍一个基于jforgame组件开发的五子棋网络小游戏,支持分布式部署战斗服。原创 2024-03-26 18:28:33 · 180 阅读 · 0 评论 -
使用动态日志简化开发时间
游戏程序日志,无论是对于开发环境,还是生产环境,都有着非常重要的作用。即是研发人员排查bug的利器,也是运营团队分析游戏内容的数据依据。本文主要演示log4j,log4j2,logback三种日志系统如何创建动态日志。原创 2024-03-19 21:58:07 · 407 阅读 · 0 评论 -
服务器生产环境问题解决思路
游戏服务器开发节奏比较快,版本迭代很频繁,导致生产环境经常出现bug。当线上出现bug,我们应该如何处理呢?以及,如何主动监控游戏线程呢?原创 2024-03-15 15:38:49 · 326 阅读 · 0 评论 -
游戏寻路之A*算法(GUI演示)
A*算法是一种路径搜索算法,用于在图形网络中找到最短路径。它结合了Dijkstra算法和启发式搜索的思想,通过综合利用已知的最短路径和估计的最短路径来优化搜索过程。本文提供代码演示,包含迷宫生成算法,A星算法,GUI动态界面演示。原创 2024-03-04 18:56:57 · 918 阅读 · 0 评论 -
谈谈分布式游戏服务器
分布式的意义游戏服务器为什么要设计成分布式?很简单的原因,为了支持服务器有更多的玩家同时在线。这里的同时在线,是要求玩家能一起交互,而不是简单的在平行世界独立you x原创 2021-06-14 13:41:12 · 2762 阅读 · 1 评论 -
游戏服务之会话管理
游戏服务器 Session(会话)是指在游戏服务器和客户端之间建立的一个临时的连接。它可以用于存储和管理用户的游戏状态和信息。从架构的角度看,客户端代码不应该依赖于具体的实现。为了框架使用者方便切换socket实现,我们应该抽离接口与实现,为Netty和Mina的会话接口做高层次的抽象。原创 2024-02-27 22:37:29 · 414 阅读 · 0 评论 -
游戏服务器之使用starter自动配置数据仓库组件
本文介绍如何使用springbootstarter打造优雅的配置数据一站式服务。/** * 配置读取仓库(只读) */public interface DataRepository { /** * 根据主键读取指定文件的配置数据 * @param clazz * @param id * @param原创 2021-05-04 12:57:16 · 526 阅读 · 1 评论 -
游戏服务端框架之csv配置格式
游戏策划大佬一般采用excel工具来管理游戏里的数值配置。对于服务器来说,Excel不是唯一的格式。典型的说,服务端很少直接将Excel文件作为数据源,服务器设计更喜欢选择将Excel导入数据库,或者将Excel文件转为CSV格式。CSV格式相对于Excel格式来说,属于纯文本格式,体积小,更方便程序解析。本文介绍如何使用csv库进行二次封装。原创 2021-04-17 12:57:57 · 678 阅读 · 1 评论 -
游戏服务端框架之本服实时排行榜
常规的排行榜设计,为了减少计算的工作量,一般采取定时刷新。这种设计从游戏策划的角度来说,也是允许的,只需要在排行榜UI上说明下刷新频率即可。本文主要介绍如何实现一个本服的实时刷新排行榜。原创 2021-02-27 13:27:38 · 1191 阅读 · 0 评论 -
游戏服务器框架之分布式id生成器
在游戏世界里,我们用id来唯一索引某个对象。小到一个道具,大到一个玩家,都是需要唯一ID。为了保证游戏服务器进行合服后,数据依然有效不重复,我们需要产生全局唯一性的id。本文探讨分布式id生成器的两种算法。原创 2021-01-31 23:28:25 · 514 阅读 · 2 评论 -
游戏服务端线程模型——无锁处理玩家请求
采用线程池组技巧,实现游戏服务端为每一个角色指派固定线程,从而达到无锁处理玩家个人请求。原创 2016-04-22 23:26:35 · 5184 阅读 · 9 评论 -
java游戏服务器业务之每日重置逻辑
大部分游戏都有每日重置的逻辑。关于每日重置,我们需要考虑两个问题。一个是如何区别在线玩家和离线玩家,一个是保证业务的线程安全的。本文提供一种方式,比较简单地实现了重置业务。原创 2017-09-17 19:38:46 · 2680 阅读 · 5 评论 -
手游服务端框架之后台管理工具
后台管理工具在游戏运营中的作用手游功能的更新迭代是非常频繁的,有些项目甚至每个星期都会进行停服更新。也就是说,对于生产环境的游戏进程,我们必须有工具能够对游戏服务进行维护,例如更新维护,或者对游戏内部各种资源进行管理。本文主要介绍管理后台的实现方案。原创 2017-09-03 22:45:01 · 8921 阅读 · 0 评论 -
游戏服务器之AI设计——有限状态机
游戏世界里有各种各样的AI行为,例如怪物砍人,玩家自动挂机等等。一个游戏好不好玩,很重要一点就是游戏的A质量,毕竟PVE占玩家游戏时间很大比重。当然,游戏AI设计难度非常大。本文介绍如何使用有限状态机实现简单的游戏AI逻辑。原创 2018-01-06 21:42:35 · 4251 阅读 · 0 评论 -
游戏服务器框架之跨服(三)
回调设计是跨服基础的一个设计难点。类似于JavaScript的Ajax请求,我们希望在向跨服发送请求,拿到服务器的返回结果后能够执行一些回调动作。本文介绍下回调设计原理。原创 2021-01-10 22:58:30 · 1093 阅读 · 11 评论 -
游戏服务器框架之跨服(二)
rpc框架的优势直接使用rpc框架来搭建跨服,我们就无需考虑跨服链路的建立,通信数据编解码,方法回调等底层问题。手写跨服通信rpc的本质其实就是跨服通信,底层是使用socket来进行数据传输的。所以我们也可以使用socket来手写一个跨服通信。服务器与服务器之间点对点的通信,其实类似于游戏客户端与游戏服务器通信。不同的是,游戏客户端与服务器属于外部网络通信,需要走公共ip,是不安全的链接;而服务器与服务器的通信,属于内部通信,可以直接用内网ip进行通信。实现跨服通信,我们需要解决以下问题:注册原创 2020-12-19 22:08:47 · 1257 阅读 · 1 评论 -
游戏服务器框架之跨服(一)
如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。几种常见的跨服玩法拓扑结构一,不同游戏服的玩家进入中立服务器进行战斗,例如跨服天梯类玩法。游戏服有很多个节点,中心服务器也有很多节点。只要保证对战的双方同时进入同一个中心服游戏进程即可。二,若干个游戏服组成一个社区,全部服务器包含多个社区,例如世界服玩法。三,游戏服A玩原创 2020-12-12 21:20:29 · 4656 阅读 · 2 评论 -
游戏服务端之屏蔽字检测
游戏中经常需要检测玩家的昵称或者聊天内容是否包含敏感词组。直接利用正则表达式进行全字匹配效率低,且无法处理拆字情况。因此,本文将设计另外一种算法,争取以较高的速度完成屏蔽字检测。原创 2016-07-30 18:11:08 · 11845 阅读 · 2 评论 -
游戏服务端之使用JMX监控游戏进程
游戏服务器运行过程中,我们希望能够对游戏里各种资源进行监控。比如,查看在线玩家总人数,查看内存使用情况,统计请求消息数量等等。这种问题归结起来就是,我们希望查看游戏进程的内存数据。本文将介绍一种黑科技(JMX),让监控游戏服务器更加方便快捷。原创 2017-02-26 13:32:08 · 1630 阅读 · 0 评论 -
游戏服务端之查看生产环境的内存数据
维护生产环境项目的时候,在排查问题的过程中,有时强烈希望查看内存中的一些数据,却苦于没有办法将这些值输入到终端或日志中。本文将使用动态执行脚本和使用自定义类加载器执行临时代码两种方式查看远程内存数据。原创 2016-08-02 17:54:47 · 5687 阅读 · 2 评论 -
游戏服务端框架之自定义orm持久化工具(二)
游戏服务端框架之自定义orm持久化工具这篇文章,实现了一个简易的ORM框架,可以满足日常的开发需求。但仍然有优化的空间,以便更适应游戏服务器的应用场合。本文继续对orm工具做进一步的优化改善。原创 2021-02-11 23:55:07 · 449 阅读 · 0 评论 -
手游服务端框架之自定义orm持久化工具(一)
使用持久化框架诸如Hibernate过于重量级,使用原生jdbc又显得非常啰嗦。本文通过几百行代码,演示一个轻量级的持久化框架。可以用于游戏服务端的数据持久化方案。原创 2017-03-18 15:34:50 · 6390 阅读 · 15 评论 -
游戏服务器框架之关于玩家数据的解决方案
玩家数据是游戏系统的血液,必须保证有高效正确的处理方案。本文将从持久层框架的选择、数据表结构设计以及数据入库模型三个方面,讨论玩家数据的相关解决方案。原创 2016-11-04 23:06:32 · 10358 阅读 · 5 评论 -
游戏服务端框架之代码热部署(二)
上一篇手游服务端框架之代码热部署介绍了如何利用JDK的Instrument工具来对java代码进行热更新。这种热更方式有一个限制,就是不能修改类的结构,也就是说,我们只能进行方法级别的代码修复。本文将介绍另外一种热更新机制。那就是基于类实例替换。原创 2020-11-21 21:19:41 · 430 阅读 · 2 评论 -
游戏服务端框架之代码热部署(一)
采用jdk6的Instrumentation接口,动态改变已加载到JVM的类文件的方法体定义,实现在不重启应用的情况下,修改文件源代码。原创 2015-09-07 22:56:29 · 4801 阅读 · 1 评论 -
手游服务端框架之合区工程
如今的游戏服务器运营策略一般为“滚服模式”。简单来说,就是运营商不停的开新区,不活跃的旧区就进行合区。这样一来,运营商既可以降低服务器硬件配置,缓解大服人数压力,也可以利用新区拉活跃猛赚一笔。本文天我们就来介绍下游戏服务器的合区工程。原创 2020-11-15 22:14:56 · 813 阅读 · 7 评论 -
java游戏服务器之使用Javascript脚本
JavaScript,一开始定位为浏览器表单验证的“玩具语言”,发展到如今,却能胜任各种舞台。nodejs,es6等等,奠定了其作为后端语言的地位。在JVM里,我们也可以直接使用javascript代码,因为jdk已默认绑定其实现。由于拥有动态语言灵活的特点,我们可以用来作很多有趣的事情。在游戏服务端开发,我们越来越多可以看到它的身影。下面我们就来看下javascript在游戏服务器里的应用。原创 2018-05-18 23:05:04 · 1120 阅读 · 3 评论 -
游戏服务器之防御式开发
游戏服务端承担着游戏复杂业务逻辑实现,玩家数据持久化等重要作用。作为一个合格的服务端开发人员,我们有必要遵守一些好的防御手段,让自己的代码少踩些坑,或者当出现了bug,能够在第一时间进行抢救。本文是我在开发过程中的经验总结。原创 2017-05-29 21:04:42 · 1942 阅读 · 1 评论 -
游戏服务端框架之跨服匹配服
如今的手游世界,如果没搞个跨服赛事,都不好意思说它是一个手游了。说到跨服,就不得不说下匹配服了。比如一个跨服天梯赛事,需要满足不同服的玩家能够同屏PK。为了能够把实力接近的玩家作为对手,我们需要一个独立的匹配服来收集数据,然后进行房间分配。匹配服,也是跨服赛设计的基础。典型的匹配服通信层我们可以采用http,也可以采用socket。本文将采用http作为游戏服与匹配服的通信层。原创 2018-03-10 18:53:18 · 5080 阅读 · 4 评论 -
游戏服务端框架之使用Redis实现跨服排行榜
实现跨服排行榜的常规方法游戏里为了刺激玩家的攀比心理,经常有各种各样的排行榜。排行榜又可以分为本服排行榜以及跨服排行榜。简单说来,本服排行榜上的记录来自本服的玩家,而跨服排行榜上的记录是来自所有服务器前N名玩家。通常,跨服排行榜含金量更大,奖励也更为丰富。从技术上而言,实现起来也更为麻烦。典型地,实现跨服排行榜有一下几种思路。取其中某个服务器作为中心服,用来收集各服排行榜数据并进行广播;使用独立进...原创 2017-10-06 22:14:07 · 3406 阅读 · 3 评论 -
游戏服务端框架之客户端协议组合下发
很多时候,客户端一个请求过来,服务端可能需要发多个响应消息。典型地,当客户端请求加载登录加载资源完成,服务端需要推送非常多的消息。功能模块越多,消息也越多。这个时候,可能就需要对下发的客户端协议进行优化。个人理解,针对这种情况,比较好的优化方式是整合多个小消息一起下发。也就是说,对于多个消息,我们不直接一个一个下发,而是把多个消息看作一个特殊的消息组合下发。多包组合下发至少有以下几个好处:1. 省...原创 2017-09-08 12:20:41 · 2734 阅读 · 5 评论 -
游戏服务端框架之使用事件驱动解决业务高耦合
游戏里经常有这样的业务,当玩家触发某个动作时,有若干与之关联的业务也要一起执行。诸如这样场景,我们选择引入事件驱动模型来帮助我们解决业务代码耦合的问题。本文实现一个工具库,来解决监听器与事件多对多的关联问题。原创 2017-08-14 22:11:10 · 2378 阅读 · 1 评论 -
java游戏服务器框架之GM金手指的设计
游戏开发需要一些命令,能够像金山游侠这种软件一样,修改游戏里的玩家或公共服务的数据。在游戏项目里,这些命令统称为GM命令。本文将介绍实现gm系统的一种方式。原创 2017-07-30 16:01:47 · 4948 阅读 · 1 评论 -
游戏服务器框架之使用Guava构建缓存系统
缓存,在项目中的应用非常之广泛。诸如这样的场景,某些对象计算或者获取的代码比较昂贵,并且在程序里你不止一次要用到这些对象,那么,你就应该使用缓存。缓存,在项目中的应用非常之广泛。诸如这样的场景,某些对象计算或者获取的代码比较昂贵,并且在程序里你不止一次要用到这些对象,那么,你就应该使用缓存。原创 2017-07-23 15:03:00 · 1873 阅读 · 1 评论 -
游戏服务端框架之配置与玩家数据库设计
一款网络游戏的设计,至少需要策划数据库和用户数据库两种数据库。本文主要介绍这两种数据库的设计及使用,同时,介绍如何通过ORM框架来完成玩家数据的持久化。原创 2017-07-16 20:56:19 · 7836 阅读 · 19 评论 -
游戏服务端框架之业务线程模型
玩家的消息请求如果放在mina的io线程池进行处理,当业务处理非常耗时,会严重影响io的吞吐量。所以,我们应该另起用于处理业务逻辑的线程池,采用生产者消费者模型,异步处理玩家请求。原创 2017-07-12 23:17:48 · 4371 阅读 · 6 评论 -
java游戏服务端框架之模仿SpringMvc实现消息路由
经典web开发项目通常采用三层架构来组织代码。典型的,第一层为表现层,通常使用MVC模式;第二层为业务逻辑层,该层主要是各种service业务操作类;第三层则为数据访问层。类似的,我们的游戏项目也可以采用上面的三层架构,使用@MessageRoute注解对应MVC模式的控制器,使用@RequestHandler注解对应的消息处理。原创 2017-07-02 14:53:56 · 3415 阅读 · 2 评论 -
java游戏服务端框架之网关
网关介绍游戏服务器的网关,主要是用于手机客户端与游戏业务服务端通信的中转器,负责接收来自手机客户端的请求协议,以及推送服务端的响应包。在单一进程服务端架构里,网关跟游戏业务处理是在同一个进程里。为了提高通信吞吐量,一些服务端架构将网关作为一个独立进程。这种模式下,客户端请求全部由网关接收,再通过网关转发给服务端;另一方面,服务端下发的消息,也只能通过网关推送到客户端。由于只有客户端跟网关是一对一的原创 2017-06-24 14:17:39 · 7449 阅读 · 4 评论