一、前言
此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器、战斗服务器、世界服务器等。此架构已成功应用在了多款页游服务器 。在此框架中没有实现相关业务逻辑,只有简单的测试用的注册登陆功能。
服务器工程---GameServer(https://github.com/yongzhidai/GameServer.git)
测试客户端---TestClient,模拟客户端与服务器通信,用于测试服务器功能(https://github.com/yongzhidai/TestClient.git)
项目工具 ---Tools,服务器搭建用到的jar包以及相关eclipse插件(https://github.com/yongzhidai/Tools.git)
二、服务器运行环境
此服务器是基于tomcat启动,所以GameServer是一个web工程,但此游戏服务器还是基于socket通信的,没有使用tomcat的http通信。游戏服务器的启动是通过在WEB-INF目录下的web.xml中添加一个监听器。这个监听器用来监听tomcat的启动和停止,当tomcat启动时则启动游戏服务器开始监听端口,当tomcat停止时则做相应的销毁操作。
可能很多人会疑惑为什么要基于tomcat呢?
基于tomcat运行有很多优势:
1、方便调试。在我们调试服务器程序时,可是利用tomcat的热加载功能,使修改的代码不用重启就可以生效
2、方便打包部署。部署一个web程序到tomcat是一个比较容易的事,对第三方jar包的依赖tomcat也会帮忙处理好
3、利用tomcat提供的数据源。这可能不算是优势,但起码还算便捷
4、方便开发GM。我们可以很容易的在次架构中加入一个机遇web的管理系统,直接管理当前游戏服务器的在线玩家
三、通信层
java开发socket服务器最常用的就是mina和netty这两个nio框架。网上有测试说netty性能稍好一些。但是由于mina在生产环境中没遇到什么问题,而且本人对mina源码比较熟悉,还是采用了mina作为通信层框架。(netty3跟mina代码结构差不多,但是netty4变化比较大,本人稍微未对源码理解透)
通信协议:flag(1 byte)+length(4 byte,消息号加消息内容的长度)+protocol code(4 byte)+content
flag:是一个预留标识
length:表示消息号和消息内容的长度
protocol code:自定义消息号,通过次消息号选择相应的消息处理器,自然消息号是不能重复的,一个int表示范围足够使用
content: 消息内容,一个有序的数据的数组。protocol code和content都要在开发功能时定义在‘消息协议’文档中的,例如GameServer项目中的“消息协议.xls”
此项目中没有对消息内容进行加密,若要加密也是很容易添加上。
消息处理:
服务器收到客户端发来的消息,MsgDispatcher会根据其消息号选择对应的MsgProcessor进行处理。MsgProcessor会读取content做相应的处理。
三、持久层
此架构的持久层使用了ibatis,可能大家觉着ibatis已经过时,现在最多时用的是mybatis。但在生产环境中ibatis一直未出现什么问题,还是可以再用的。还有mybatis的使用必须每次open一个connection使用完必须close掉,多少感觉有点麻烦(如果使用spring aop到可以避免这种问题)。而在ibatis中,它提供了一个SqlMapClient类,这个类是线程安全的,我们只需要把数据库操作交到SqlMapClient,它内部会帮我们open、close数据库连接。
做游戏开发都知道,游戏对数据库的要求比较低,我们不需要什么复杂的数据库操作,所以在持久层我们使用ibator做代码生成工具(相应的插件在Tools项目中有),可以节省大量的开发工作。
先写到这吧,有什么拉漏以后再做补充。具体实现还是看代码比较直观
分享到:
相关推荐
下面将详细阐述如何使用Java搭建本地服务器,并让Android客户端进行访问。 首先,Java作为后端语言,可以通过多种框架来搭建服务器。例如,我们可以使用轻量级的Spring Boot框架,它简化了创建独立的、生产级别的...
【JavaMail邮箱服务器搭建步骤详解】 在现代的数字化工作中,电子邮件已经成为不可或缺的沟通工具。对于企业和个人来说,拥有一个自定义的企业邮箱服务器可以提供更高的安全性和管理效率。Apache James是基于Java...
在IT行业中,Java Web服务器的搭建是开发人员和运维工程师必备的技能之一。本文将详细介绍两种常见的搭建方法:方案一采用JDK1.5搭配Resin3.0手动搭建,方案二则是通过集成开发环境Eclipse或MyEclipse配置Resin...
这个压缩包可能包含源代码、配置文件和其他相关文档,帮助我们理解如何在Java中利用Netty搭建游戏服务器。 首先,Netty的核心是其事件驱动模型。它基于Java NIO(非阻塞I/O)进行扩展,提供了更高级别的API,使得...
本文将深入探讨如何使用Java语言搭建一个简单的Web服务器,以及这个过程中的关键知识点。 首先,我们要理解Web服务器的基本概念。Web服务器是一种软件,它接收HTTP(超文本传输协议)请求并返回HTML页面或其他Web...
搭建OTA下载服务器 OTA(Over The Air)下载服务器是一种通过无线网络下载和安装J2ME应用程序的方案。搭建OTA服务器是比较简单的,但是做一个完整的OTA服务器却非常复杂,因为这要设计到软件的管理、下载的计费、...
### 奇迹MU游戏服务器搭建部署包知识点详解 #### 一、奇迹MU游戏简介 奇迹MU是一款由韩国Webzen公司开发的经典大型多人在线角色扮演游戏(MMORPG),自2002年在中国大陆上线以来,迅速获得了广大玩家的喜爱。游戏...
linux服务器上的操作系统、java环境搭建以及优化,便于学习
在Linux平台上搭建Java Web服务器是一项综合性的技术任务,涉及到操作系统配置、网络服务部署以及应用服务器的安装与调优。根据给定的文件信息,我们可以深入探讨以下关键知识点: ### 一、Linux环境下软件包管理 ...
Linux 服务器 Java 开发环境搭建 Linux 服务器 Java 开发环境搭建是指在 Linux 操作系统下搭建一个完整的 Java 开发环境,包括 JDK、Tomcat 和 MySQL 的安装和配置。本文将详细介绍如何在 Ubuntu 操作系统下搭建 ...
在IT领域,Java语言因其强大的跨平台能力和丰富的库支持,被广泛用于开发各种应用程序,其中包括服务器端程序。...通过学习和实践这个例子,初学者可以逐步了解网络编程和Java服务器开发的基础知识。
本项目聚焦于“基于Java的流媒体视频直播服务器设计与实现”,这涉及到多个IT领域的知识,包括音视频处理、服务器架构、Java编程以及运维等。 首先,我们要理解流媒体的概念。流媒体是指在互联网上传输的连续多媒体...
在本项目中,开发者可以找到实现游戏服务器所需的基本结构和组件,以便快速搭建和部署游戏服务器。 Java作为一门跨平台的编程语言,具有丰富的类库和强大的性能,使其成为开发游戏服务器的理想选择。其垃圾回收机制...
【标题】:“自己用JAVA做的一个多线程文件服务器” 这篇博客文章主要介绍了一位作者使用Java编程语言构建的多线程文件服务器。在IT行业中,文件服务器是用于存储和管理网络上共享文件的重要组件,而使用Java实现...
1.客户端通过Windows的命令行访问FTP服务器。 2.FTP服务器可以并发地服务多个客户。 3.至少实现对FTP命令user、pass、dir、get的支持。即用户注册、显示服务器端的文件列表、下载文件等。(补充了上传文件,同时处理...
本项目以"基于Netty的Java游戏服务器"为例,详细讲解如何利用Netty来搭建高效稳定的游戏服务端。 首先,Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它的核心在于...
在本教程中,我们将深入探讨如何搭建一个基于Tomcat 7的OTA服务器,特别是针对Amlogic芯片组的Android设备。 首先,我们需要了解基础的服务器环境设置。服务器通常运行在Linux操作系统上,例如Ubuntu或CentOS。确保...
标题:“最简单的 LDAPS 服务器搭建方法--ApacheDS 安装以及 LDAPS 配置” 从标题中,我们可以看到本文的主要内容是介绍如何使用 ApacheDS 构建一个简单的 LDAPS 服务器。LDAPS 服务器是一种基于 X.509 证书的身份...
本文介绍如何搭建一个本地的MQTT服务器,重点是在已经安装Java环境的基础上使用Apache Apollo软件来完成。 首先,搭建MQTT服务器的前提条件是电脑上必须配置有Java运行环境。Java环境是执行Java程序的必需品,对于...