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