`
hepeng19861212
  • 浏览: 151054 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多年前的一款页游《倾城》服务器源码分析

    博客分类:
  • java
 
阅读更多

未完结版。业务逻辑代码 有点看不下去了,于是就放弃了。

1.网络层:


 

游戏代码中,网络服务器端 提供了两套实现,一套是SimpleNetServer,基于BIO(阻塞IO)的ServerSocket;另一套是NIONetServer,基于NIO(即非阻塞IO selector模式的ServerSocketChannel。前者应该是用于开发期间的调试和测试;而后者用于实际生产环境。

比较两者关闭服务器的方式,前者是直接中断线程的,比较粗暴;后者是通过设置轮训字段字段(running)的状态来关闭的,更优雅、可靠。

其他细节,详见代码。

心跳消息:NIONetServer.run() -> NetConnection.update()

 



 

NetConnectionclient连接,以及收发消息的操作做了封装。并有两个子类继承之,其中SimpleConnection对应于SimpleNetServer,是BIO服务器端的网络连接对象;NIOConnection对应于NIONetServer,是NIO服务器端的网络连接对象。

 

 

 

消息解码器/编码器:



 

Request消息NIO处理流程:



 

2.数据层

游戏把数据持久层和数据缓存层 合并为同一层了。所以这里就并为一层来一起讲解。



 

    如果非要分数据持久层和cache层,DataAccessor算是主要提供了cache的实现。持久层提供了2种实现:LocalFileAccessor是将用户数据存放在本地文件系统中,以文本文件的形式存在,详见localdata\*data\*,貌似data目录下的更齐全。目前源码中用到的是localdataDatabaseAccessor是将用户数据存放到数据库中,读了GameServer.init()中提供了mysqlmssql两种数据库可选,而配置文件config\server.cfg中配置的是mssql数据库的数据源信息,而且还提供了mssql的驱动包。

    DatabaseAccessor中,写数据库是异步的:创建一个包含jdbc sql语句和参数的job,放入队列中等待运行。对于插入操作,是先插入name,然后获取数据库生成的id,赋值到内存中,然后创建一个update job放入异步队列中等待更新。

    这一层的源代码没有太多可圈可点之处,问题却是比较多,比如sql语句硬编码到源代码中,jdbc代码充斥于各个角落,导致代码冗余且难以维护;数据持久层仅仅使用了单个队列、单个线程处理,在某些情况下风险很高,例如单个job处理时间过长导致后续job没有机会及时运行,尤其是当队列严重阻塞、断电或宕机时后果最为严重;不能充分利用多核cpu的资源。

 

 

 

  • 大小: 29.4 KB
  • 大小: 29 KB
  • 大小: 14.2 KB
  • 大小: 45.5 KB
  • 大小: 10.7 KB
分享到:
评论

相关推荐

    倾国倾城服务器端源码

    《倾国倾城服务器端源码》是一款专为游戏《倾国倾城》设计的服务器端软件,其源代码的开放对于开发者来说是一份宝贵的资源,可以深入理解游戏服务器的运行机制,进行二次开发或者优化现有系统。在这个压缩包中,包含...

    倾城服务器源码解读(一)

    《倾城服务器源码解读(一)》这篇文章主要聚焦于解析服务器源码,尤其是与ByteBuffer相关的部分。ByteBuffer作为Java NIO(非阻塞I/O)的一部分,是处理内存缓冲区的关键类,对于高性能网络编程至关重要。在本篇...

    反编译后的完整的倾城源码

    "反编译后的完整的倾城源码"这一主题涉及到了软件逆向工程和源码分析的核心概念。在IT行业中,逆向工程是一种技术手段,通常用于理解已编译的二进制程序的工作原理,而源码分析则是在获取到源代码后,对代码逻辑、...

    倾国倾城源码

    【倾国倾城源码】是一个与网站开发相关的项目,其名称可能源于对中国古代美女的赞誉,用在网站上可能是为了表达设计的优美或者功能的强大。在这个特定的压缩包文件中,我们看到一个名为"WebTmNew20090817综合 - 副本...

    倾城源码导读之二

    在“倾城源码导读之二”中,我们聚焦于一系列与消息编码解码相关的Java源代码文件。这些文件在IT行业中通常是用于网络通信或数据序列化的关键组件。以下是每个文件的功能及其在整体系统中的作用: 1. `AppMessage....

    倾城数据抓取源码 v1.0.zip

    倾城数据抓取源码功能介绍: 这是一款ASP.NET的网络抓取数据的程序,有着较好的界面功能。 通过搜索网站或贴吧,根据你需求的关键字抓取网站上的信息,搜索可做扩展! 页面搜索功能设置:搜索网站选择框,采集...

    Discuz! 倾城论坛

    倾城论坛】是一款基于PHP和MySQL构建的开源、免费的社区论坛软件,由Comsenz公司开发。它以其强大的社区功能、丰富的插件系统和灵活的主题模版而广受用户喜爱。在网页模版方面,Discuz! 提供了多种风格的界面设计,...

    倾城销售管理系统java

    总结起来,"倾城销售管理系统java"是一个综合运用了Java、JSP和Servlet技术的Web应用程序,旨在提供全面的销售管理功能,包括但不限于订单处理、库存控制和数据分析。其背后的开发和运行涉及到了多种Java相关技术和...

    倾城TXT编辑器工具

    "倾城TXT编辑器工具"是一款专为处理TXT文本文件设计的应用程序,它提供了一种高效、便捷的方式来管理和编辑纯文本文件。这款编辑器可能是针对特定的“倾城服务端”进行优化,使得用户能够更好地与该服务端配合工作,...

    微微一频也倾城

    微微一频也倾城

    倾城综合盒子v1.2免费绿色版

    倾城综合盒子是一款由易语言和游戏辅助还有工具组成的盒子,倾城综合盒子绿色免费使用,资源都是网络搜集,是一款不错的综合工具箱。 更新内容 1.更新了界面优化 2.点击按钮直接下载到C盘,取消打开网址 3.取消了...

    ShopEx商店 红色倾城

    “红色倾城”模板是ShopEx模板库中的一款,其设计重点在于视觉吸引力。红色在中国文化中通常象征着热情、活力和好运,因此这个模板特别适合那些希望吸引中国消费者的商家。模板的布局清晰,导航直观,商品展示醒目,...

    倾城Asp.net数据抓取源码 v1.0

    这是一款ASP.NET的网络抓取数据的程序,有着较好的界面功能。通过搜索网站或贴吧,根据你需求的关键字抓取网站上的信息,搜索可做扩展!页面搜索功能设置:搜索网站选择框,采集信息的显示条数及关键字输入框;显示...

    倾城Asp.net数据抓取源码v1.0

    这是一款ASP.NET的网络抓取数据的程序,有着较好的界面功能。 通过搜索网站或贴吧,根据你需求的关键字抓取网站上的信息,搜索可做扩展! 页面搜索功能设置:搜索网站选择框,采集信息的显示条数及关键字输入框; ...

    PHPWind 月璇倾城模板

    【PHPWind 月璇倾城模板】是一款专为PHPWind论坛系统设计的精美主题模板,旨在提升论坛的整体视觉效果和用户体验。PHPWind是中国知名的开源社区软件之一,以其高效、稳定和丰富的功能受到广大站长的喜爱。月璇倾城...

    如何令山倾城山倾城战略思路.pptx

    该文档主要讨论的是一个名为"山倾城"的房地产项目的战略思路,主要涵盖了品牌、产品、市场、推广、目标、销售以及关系等多个方面。在这个战略中,"山倾城"项目被赋予了重要的战略意义,旨在成为中国旅游地产领域的...

    倾国倾城护肤品-购物清单

    私用,文件备份 倾国倾城护肤品-第二期更新

    如何令山倾城山倾城战略思路REPORT(ppt37页).pptx

    标题中的“如何令山倾城山倾城战略思路REPORT(ppt37页).pptx”是一份关于房地产战略规划的报告,重点在于阐述一个名为“山倾城”的项目的战略思路。描述中的信息与标题一致,暗示这是一个关于项目发展战略的详细报告...

Global site tag (gtag.js) - Google Analytics