Carmelo是基于Java的游戏服务端框架,适合于页游和手游。它的主要特点是:
- 利用Netty实现高效的NIO通信,同时支持TCP/HTTP协议
- 完善的三层架构模型,易扩展
- 通用、完善的session管理机制,无需从头实现
- 提供了完整的server/client demo,可以作为很好的开发参考
- 提供较多游戏开发常用的工具类(后面准备陆续加入)
项目网址(欢迎watch和star):
https://github.com/needmorecode/game-server-framework
第一次做开源项目,万事开头难。目前项目只是一个雏形,想必还有许多考虑不周和不完善的地方,欢迎指出和提建议。我只要有时间都会一一回应。做这个项目也是打算长期经营下去,尽力做到完善,达到传播技术、共同学习的目的。
—————————————————————————————————————————
2018.7.22更新版本1.0.1:
- 完善新手实例
- 完善session id生成机制(加密)
- 加入心跳包机制(三分钟超时)
—————————————————————————————————————————
2018.7.29更新:
- 改进json工具类
—————————————————————————————————————————
2019.3.2更新:
- 日志管理
引入logback,日志分为多种:interface,login,timer,error。
—————————————————————————————————————————
2019.3.6更新:
-
加入定时器
考虑到Java自带的timer有以下缺点:- 不支持修改系统时间。它是基于wait实现的,系统时间调整后无法随之动态调整。
- 是用单线程实现。所以当一个任务执行时间过长时,会影响下个任务执行。
- 未捕捉的异常会导致线程死掉,无法继续执行后续任务。
自己实现的timer规避了以上问题,使用线程池调度任务,基于线程轮询而非wait来处理任务执行,且框架支持timer日志打印。
—————————————————————————————————————————
2019.3.13更新:
-
增加热更新功能
目前最主流的Java热更新方法,主要思想是attach到Java进程,替换class文件,使用到agentmain、Instrumentation等技术;虽然有只能修改方法体内部的限制,但对于游戏来说已足够。
同时看到有个开源项目HotswapAgent,号称可以做到无限制修改运行时的class,具体没有深究。 -
使用druid替代proxool
考虑到proxool已经多年没有维护了,而druid是目前最主流的数据库连接池之一,性能更好。
—————————————————————————————————————————
2019.3.24更新:
- 使用gzip压缩服务端返回消息
- 增加服务器之间的rpc功能
实现思路是将参数和返回值中的对象序列化成json字符串,然后rpc command本身也编码进字节数组(同普通command)。实现效果是要做到同本地调用方法一样方便。
—————————————————————————————————————————
2019.3.27更新:
- 支持websocket协议
—————————————————————————————————————————
2019.11.16更新: