# xinyue-alone-game-server **Repository Path**: qwei/xinyue-alone-game-server ## Basic Information - **Project Name**: xinyue-alone-game-server - **Description**: 单服游戏服务器框架 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 53 - **Created**: 2021-01-04 - **Last Updated**: 2021-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xinyue-alone-game-server ## 摘要 这是一款单服框架的游戏服务器架构。俗话说,麻雀虽小,五脏俱全,虽然是单服框架,但是也是包罗了很多游戏服务器开发必用的技术要点,方便部署和使用,可以说是从入门到高级的一个学习过程,也是通往分布式服务器开发的阶梯。本项目简单易用,稍加修改就可以用于一般的单服游戏开发。更多详细文档可以到这里[点击查阅文档]( http://www.xinyues.com/) ## 使用的技术栈 ### 客户端 * unity3d * Newtonsoft.Json * 协议-http post ### 服务器端 * Spring Boot * Netty Client/Server 实现网络层的客户端与服务器通信 * Spring Shell 用于开发命令窗口,模拟客户端操作 * Arthas 实现不重启服务器热更新代码 * Logback 日志框架 * MongoDB 数据库 * lombok 用于自动生成类的Getter和Setter方法,在IDEA中需要安装Lombok插件 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0523/210511_b2cc8c37_23677.png "屏幕截图.png") ## 主要实现的功能 ### Java客户端实现的功能 * 使用Netty实现游戏服务器的启动与端口监听 * 使用Spring shell与Netty实现一个模拟的客户端,可以与服务器建立连接并正常通信。 * 解决了网络通信的断包粘包问题 * 实现了消息的序列化与反序列化 * 实现了业务逻辑与底层消息的分离,开发者可以直接上手写游戏业务逻辑,而不用过多的了解底层的实现,提高开发效率 * 保存每个用户的基本业务操作都是顺序性的,不需要加锁。 * 实现客户端连接认证 * 实现客户端与服务器通信消息的加密与解密 * 实现客户端与服务器通信消息的压缩与解压 * 实现多客户端连接管理 * 实现服务器的消息广播机制 * 集成了阿里的Arthas,实现代码热更新。 ### Unity客户端实现的功能 * Http Post请求与解析 * 账号注册 ## Unity3d客户端使用说明 ### 客户端运行 目前发布了windows版本的客户端,在项目的unity3d-client目录下面,双击即可运行。 ### 设置服务器地址 运行客户端之后,如果是第一次使用,点击设置按键,填写服务器地址,这个地址是一个Http 域名或IP,如:http://localhost:8080, 它连接的服务是项目中的game-center-server(即中心服务器,负责http的服务)。可以根据自己的中心服务运行的环境设置客户端连接的服务器地址。如图所示: ![设置服务器地址](https://images.gitee.com/uploads/images/2021/0523/203933_79cbb3c6_23677.png "屏幕截图.png") ### 注册账号 如图所示: ![注册账号](https://images.gitee.com/uploads/images/2021/0523/204415_0508859b_23677.png "屏幕截图.png") ## 服务器使用说明 ### 项目简介 本项目使用IDEA开发 * game-client-shell 客户端模拟项目,使用spring shell框架实现,主要用于模拟客户端连接服务器,并向服务器发送消息 * game-server 服务器项目,使用spring boot + netty实现,接收客户端的请求并处理请求和返回数据 * game-network 网络层封装,单独把它做为一个项目实现,可以方便game-client-shell和game-server项目的依赖。让它们共用一套网络层实现。 * game-network-messages 游戏通信消息包,对于开发者而言,网络层的消息都会在项目底层被转化对象使用,这些对象被称为客户端与服务器的通信消息。把它们放在一个项目中实现,方便客户端与服务器依赖使用 ### 项目启动 1. 将项目导入到IDEA之中,在IDEA中直接启动即可 2. 将项目打包成单独的Jar包,在命令窗口中启动 进入项目的game-frame目录,在此目录打开命令窗口,执行命令: ``` mvn clean pacakge ``` * 启动game-server服务器 执行打包命令成功之后,在命令窗口中进入game-server/target目录下面,执行命令: ``` java -jar game-server-1.0-SNAPSHOT.jar ``` ![服务器启动](https://images.gitee.com/uploads/images/2021/0130/013210_ba45fa42_23677.png "屏幕截图.png") * 启动game-center-server服务 执行打包命令成功之后,在命令窗口中进入game-server/target目录下面,执行命令: ``` java -jar game-center-server-1.0-SNAPSHOT.jar ``` ![启动中心服务](https://images.gitee.com/uploads/images/2021/0523/205757_1d0e5b11_23677.png "屏幕截图.png") * 启动Java客户端 执行拍板包命令成功之后,在命令窗口中进入game-client-shell/target目录下面,执行命令: ``` java -jar game-client-shell-1.0-SNAPSHOT.jar ``` ![启动客户端](https://images.gitee.com/uploads/images/2021/0130/013547_798008e2_23677.png "屏幕截图.png") Java客户端将来还有个地方使用,就是服务器开发人员开发完功能之后,可以使用相关的命令向服务器发送消息自测自己开的功能。在将来也可以封装一个 压力测试的机器人客户端。 * 连接服务器 输入命令:connect-server localhost 8089 发送登陆消息: login wwww 3333 ![连接服务器](https://images.gitee.com/uploads/images/2021/0130/013648_54abe570_23677.png "屏幕截图.png") * 查看客户端支持的命令 使用help命令,可以查看客户端支持的命令: ![查看命令](https://images.gitee.com/uploads/images/2021/0130/013852_32cdc306_23677.png "屏幕截图.png") 3. 注意事项 在mac或linux上执行上面的命令基本没有问题,但是在windows dos窗口中执行,有可能出现乱码,因为windows dos默认的编辑是GBK,解决方法请点击这里:[去解决乱码问题](https://www.yuque.com/wangguangshuai/gameserver/us4v94) ### 配置管理 本项目使用的spring boot框架开发,所以项目的配置遵循spring boot的约定。 ## 交流方式 可以加入QQ群: 66728073 欢迎关注下面的公众号,会定期推送游戏开发相关文章 ![公众号,欢迎关注](https://images.gitee.com/uploads/images/2021/0130/014411_4f903920_23677.png "文章中插入的公众号关注.png") 更多详细文档可以到这里[点击查阅文档]( https://www.yuque.com/wangguangshuai/yk7fr3)