网站首页 > java教程 正文
为什么游戏服务器很多都用Java开发
Java 做游戏服务器开发的优势还是很多的,《我的世界》的服务器就是Java开发的。Java技术比较成熟,大数据,云计算,网站App后台,基本都采用Java开发,同时跨平台,游戏服务器这个领域,使用Java的公司月越来越多,一是技术成熟,简单,有很多框架可以使用,二来是招人也比较方便。
这里
游戏服务器和应用服务器不一样,游戏服务器是需要让多个玩家同时在线,而应用服务器是玩家和系统之间的数据交互和通讯,所以应用服务器大多以http 短连接为主,而游戏服务器需要多人同时在线,同时服务器有时候要主动通知客户端,所以游戏中以长连接为主,同时支付等功能又需要http的短连接, 所以游戏服务器网络短连接+长连接模式。游戏服务器网络模块需要学些Netty等NIO高性能的网络库, 同时需要http,所以一般会搭建一个http server, 用来提供支付,资源更新, 游戏公告等功能服务,有时候登录也是走的http。Httpserver可以使用spring等, 具体取决于开发人员如何选定。多人同时在线的游戏逻辑服务器通常使用的是长连接,需要要提供高性能,高并发,目前主流的游戏服务器很多都用Netty这个NIO的网络框架。客户端发数据到服务器,或服务器发数据给客户端都需要对数据协议进行约定,将要发送的数据对象序列化成二进制,然后传送,接收端收到数据后再反序列化回来,一般这个我们采用Protobuf来做, 性能好,体积小,跨语言平台。
Java游戏服务器的数据库的技术
游戏开发中经常需要把数据保存到数据库,同时有些数据可能我们要缓存起来,数据这块也是比较重要的,Java 提供了完整的数据库的支持,JDBC,可以支持多个数据库,我们可以选用mysql等常见的数据库。同时为了加快访问,我们会把数据库中的数据缓存起来,一般主流的缓存技术可以采用redis来做。同时在开发中我们设计到大量的更新和修改数据库中的数据,如果全部手写sql,写起来也麻烦,同时如果数据结构有改动,所有的sql都要改动,所以一般我们会给数据库系统加一个ORM的框架,封装好后直接可以把数据结构更新到数据库,和把数据库内容加载出来生成数据结构。
Java 游戏服务器的日志技术
日志对于游戏服务器开发来说是非常重要的,特别是上线的时候,日志是最重要的一个调试手段,线上版本代码出了bug,也只能通过日志来查,所以一个好的日志系统非常的重要,Java的日志系统也是非常成熟的,比如log4j等,很多日志系统可用。而且都比较成熟。
Java多线程技术, 反射, 注解
多线程,反射,注解对于Java游戏服务器来说也是非常重要的技术栈,首先我们要做高性能高并发,多线程就是非常重要的手段, 线程调度,线程同步, 线程通讯等。整个游戏服务器的业务驱动也是基于多线程来驱动的,所以多线程对Java游戏服务器非常重要。Java的注解就更加普遍了,很多我们要做的服务,描述这个服务的一些属性,我们经常需要使用注解,基于注解,我们能更好的管理我们的服务,编写业务逻辑。反射也是我们做游戏服务器常用的,特别是事件响应和处理,我们把对应的处理和对应的事件联系起来,底层都是通过反射,根据对应的事件编号等规则找到处理的反射对象或方法,底层来处理,这样业务逻辑层只需要接入服务的处理类就可以了,底层通过反射来把对应的事件映射派送到对应的服务。
游戏开发常用的算法
游戏服务器,很多采用状态同步,其实所有的业务逻辑就是在服务端来跑, 服务端要处理游戏常用的经典问题,碰撞检测,寻路导航, 怪物AI等。所以我们需要基于Java服务器实现常用的算法和工具,比如寻路导航,行为决策树,有限状态机, 物理引擎,碰撞检测等。对于大型的MMORPG而言,还需要做好AOI的状态管理等,这些游戏中常用的核心算法我们要准备好。
Java游戏服务器组织项目工具
使用Java来做游戏服务器,我们如何选择开放工具有Eclips+Maven或者是idea, 从开发工具来说都相对好用,但是idea似乎更懂程序员,越来越多的人也投入了idea的怀抱。其实两个方式组织起来都非常简单,还有些项目一个项目,两种工具开发模式都支持。多人协作,代码的版本管理,目前比较流行的有svn, git, git应用非常的广泛,针对分布式开发与版本管理,都非常好用,svn使用相对简单,但是分布式多人协作这块确实没有git灵活方便。
Java来做游戏服务器需要用到的大体的一些技术点,我们就给大家讲解到这里,下面我大家分享一下我们做商业项目的Java服务器用到的库,供大家参考。
Netty | nio socket 框架 | [http://netty.io/](http://netty.io/)
jprotobuf | 通信双方消息编解码 | [https://github.com/jhunters/jprotobuf](https://github.com/jhunters/jprotobuf)
Guava | 玩家数据缓存系统 | [https://github.com/google/guava](https://github.com/google/guava)
Jedis | 跨服数据内存数据库 | [https://redis.io](https://redis.io/)
quartz | job调度任务 | [http://www.quartz-scheduler.org/](http://www.quartz-scheduler.org/)
groovy | 热更新维护相关 | [http://www.groovy-lang.org/](http://www.groovy-lang.org/)
proxool | mysql数据链接池 | [http://proxool.sourceforge.net/](http://proxool.sourceforge.net/)
slf4j+log4j | 日志系统 | [https://www.slf4j.org/](https://www.slf4j.org/)
maven | 依赖管理及项目构建 | [http://maven.apache.org/](http://maven.apache.org/)
下面给大家带来java游戏项目合集,可以平时练手,也可以当做毕业设计
最全Java游戏项目合集!(含源码+课件)10款经典游戏项目训练_超详细教学内容_Java入门_Java基础_哔哩哔哩_bilibili
猜你喜欢
- 2024-12-01 Java游戏开发基于J2ME的手机游戏开发
- 2024-12-01 适合编程初学者的开源项目:小游戏2048(Java版)
- 2024-12-01 Java Swing五子棋游戏
- 2024-12-01 Java 开源 斗地主 游戏源码 程序员放松神器 的调试实战
- 2024-12-01 拆解经典互联网游戏“贪吃蛇”的 Java 实现流程
- 2024-12-01 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧
- 2024-12-01 java 游戏服务器框架 ioGame 17.1.54 netty nginx 代理获取用户真实ip
- 2024-12-01 误入 GitHub 游戏区,意外地收获满满
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)