网络游戏一般采用C/S结构,客户端负责绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的画面绘制,客户端与服务器通过网络数据包交互完成每一步游戏逻辑。

网关服务器方式,主要职责是将客户端通信和游戏服务器隔离。

网关服务器只负责解析数据包、加解密、超时处理、过滤错误包,客户端只需建立和网关服务器的连接即可进入游戏,无需与游戏服务器直接连接。

网关服务器分为LoginGate(登录网关服务器)、GameGate(游戏网关服务器)。

1、LoginGate主要负责在玩家登录时维护客户端与LoginServer之间的网络连接与通讯,对

LoginServer和客户端的通信数据进行加密、校验。

2、LoginServer主要功能验证玩家账号是否合法,并生成一个登录凭证SESSIONKEY。

3、GameGate主要负责客户端与GameServer之间网络连接和通讯,对客户端请求和发送数据做简单分析。

4、GameServer主要负责游戏逻辑处理,包括战斗系统、任务系统、角色系统、地图系统等。

5、DBServer主要负责游戏数据缓存,包括玩家游戏属性数据,降低数据库压力。

6、Mserver负责一组服务器中对多台GameServer之间数据转发和广播。

7、Mysql负责数据持久化存储。

服务端事件系统

什么是事件系统

事件系统是整个WebGame系统里一个核心的组成部分,它控制着游戏的进程,使游戏能够及时执行到期命令。

事件是指游戏里玩家的某个活动指令,它可以分为瞬时活动和非瞬时活动。

瞬时活动顾名思义就是在玩家发出指令的瞬间就能完成的活动。

玩家从NPC里购买一瓶药水,在玩家发出这个指令后,玩家的金钱减少,药水增加1瓶,这一切都在玩家发出指令后瞬间完成。

而非瞬时活动则是在玩家发出某个指令后一段时间才会被执行。

例如RPG游戏里玩家鼠标点击地图上某个怪物进行攻击。这个攻击过程就是一个非瞬时过程,它有了一个战斗的过程,这个过程需要消耗一定的时间。

在WebGame里,玩家的很多操作可以看作时候瞬时事件和非瞬时事件的结合。

例如在策略游戏里升级建筑物,瞬时事件是村庄资源减少,非瞬时事件是建筑物建设,非瞬时事件的结果是建筑物等级上升。

比如策略游戏中的军队战争,瞬时事件是当前村庄的士兵减少,非瞬时事件是减少的士兵移动到需要攻击的村庄,结果是,两个村庄开打了。

数据库存储方式与内存存储方式对比:

游戏中的事件队列会比较多,体现在数量和类型上。各种各样的事件队列。

SLG游戏中:

1、城池建造建筑。

2、城池间战争。

3、城池造兵。

4、研究科技。

RPG游戏中:

1、战斗打怪或PK。

2、连续打怪挂机。

3、修炼挂机。

4、技能修炼。

LINUX消息队列存储的优势在于降低了PHP进程对数据库查询压力,缺点是服务器宕机,内存中存储的消息事件队列将会丢失,RPG打怪事件队列丢失影响不大,只是当前打的这个怪物无效,但是其他类型的事件队列丢失话有可能影响巨大,还有查询到期事件的效率问题。

客户端玩家发起战斗事件指令,服务端PHP接收到该事件,进行战斗合法性验证后将该事件即相关运算数据存储到LINUX消息队列中,PHP战斗进程监听LINUX消息队列。

如果发现消息队列中有战斗事件:

1、PHP运算进程进行运算。

2、PHP运算进程在运算完之后将运算结果写入玩家战斗结果DB内存表中存储,并将战报借助IM推送到客户端进行播放。(注:战斗结果是存DB中还是存入LINUX消息队列或MEMCACHE内存中?)

3、PHP战斗结束进程监听数据库中玩家战斗结果表,战斗结束时间到,则删除该条数据,

并处理战斗奖励。

4、避免玩家重复发起战斗事件,可以在服务端通过玩家ID验证是否有正在战斗的战斗队列。(注:是否需要做服务端战斗状态验证?怎么做?查询检索?)

综上分析,服务端战斗相关进程会有两个以上,PHP监听战斗事件并运算进程,PHP监听战斗结束进程。 PHP处理战斗运算进程可以扩展出战斗运算分布式服务器。

对于任何项目,一个好的数据库设计极其重要,对于WEBGAME来说就更是重中之重了。一个好的数据库设计相当于一付好的骨架和脉络,当你的骨架搭建好,脉络理顺后,再进行游戏功能代码的时候将会非常顺畅。

怎么样才能设计好一款WEBGAME的数据库呢?

在设计前因做好如下准备:

1、对于游戏业务逻辑要相当清晰。

2、多和游戏策划人员进行沟通,充分了解游戏功能需求。

3、发现游戏逻辑部分有矛盾时及时向策划人员反馈、调整。

4、对于游戏功能先按模块进行划分,然后再细化到每张表结构。

5、对于游戏逻辑复杂的功能点需要反复推敲。

开始设计数据库的时候因注意:

1、表名、字段名规范化,按游戏功能模块划分逻辑相近的表放在一起。

2、合理的区分游戏配置数据表和玩家数据表。

3、游戏配置数据表和游戏玩家数据表在表名上区分开,或则分库。

4、合理权衡表结构的逻辑关系、性能优、易理解、易扩展。

5、表字段类型长度设置合适,能用int就不要用varchar,能用mediumint就不要用int。

6、合理使用数据库表的纵切与横切来降低表压力。

7、合理规划表结构,常用字段和非常用字段,尽量在设计上避免关联查询。

8、一定要用INNODB事务表,游戏数据表中处处都是事务关联数据。

9、合理使用JSON格式进行数据存储。

10、数据冗余和性能权衡是个问题,比如用户昵称、职业等字段。

11、设计好表索引字段、用好联合索引。

12、在合适的功能上用好数据库内存表。

13、通过SQL来验证数据是否存在时一定要用COUNT(*)。

14、主从数据库用在游戏中会有数据延迟问题,不够实时。

15、合理的规划拆分数据库。

https://www.cnblogs.com/zhuawang/category/434294.html

java游戏服务器发_网络游戏服务器架构(转)相关推荐

  1. mysql 游戏服务器设计_网络游戏服务器数据库设计和实现.doc

    网络游戏服务器数据库设计和实现 摘 要 随着的普及,网络游戏已经成为大家耳濡目染的新生事物.现在,可以说网络游戏已经成为人们休闲.娱乐的有效方式.网络游戏必须依托于互联网可以多人同时参与游戏,通过人与 ...

  2. 武林外史java游戏,武林外史_网络游戏专区_腾讯游戏频道

    1 .武师用防御工具 1) 武卫类 => 用土布制作的防护工具. 阶段 图片 名称 说明 1 武威带 所需功力值 所需力量 所需技艺 所需体力 所需智能 所需敏捷性 防御力 防御 成功率 8 0 ...

  3. 从零开始发布前端代码到服务器上_无服务器计算:让每行代码都能住上“经济适用房”...

    是时候展现真正的实力了!大胆报名吧!! 摘 要 独立的简单函数可以让开发工作变得更加容易,同时由事件驱动的执行可让操作变得更加便宜. 开发人员往往需要花费大量的时间编写代码以解决业务问题.随后,运营团 ...

  4. 逆战网络连接断开连接服务器超时_逆战服务器连接超时 与服务器连接超时的原因...

    今天小编为大家带来了逆战服务器连接超时 与服务器连接超时的原因,感兴趣的朋友们可以跟着小编去下文了解一下哦! 很多玩家都碰到过这种问题,大多都是腾讯的TP安全防卫提示的这个消息,大家大可不必着急,出现 ...

  5. 逆战网络连接断开连接服务器超时_逆战服务器连接断开 与服务器连接断开的原因...

    今天小编为大家带来了逆战服务器连接断开 与服务器连接断开的原因,感兴趣的朋友们可以跟着小编去下文了解一下哦! 很多玩家都碰到过这种问题,大多都是腾讯的TP安全防卫提示的这个消息,大家大可不必着急,出现 ...

  6. java游戏修改存档_【教你在用一键存档手机端修改JAVA游戏人物属性BT】详细教程...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 教你详细用手机修改JAVA游戏人物属性.金钱.先下载下面的附件.一键(植入)存档(JAR).下载完成后安装该软件-打开该软件(选择要植入的RMS存档.植入 ...

  7. java游戏修改文件_教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏

    教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏 作者:admin教程来源:百科原创点击数:6688 更新时间:2009-6-4 JavaMagic是一款为解决手机Java游戏某些兼容性 ...

  8. 诺基亚java游戏宠物孵化_就这两招让诺基亚Java游戏运行于其他品牌的手机上

    就这两招让诺基亚 Java 游戏运行于其他品牌的手机上 佚名 [期刊名称] <数字通信> [年 ( 卷 ), 期] 2006(000)014 [摘要] Java 游戏是手机游戏中的主力军, ...

  9. 我的世界java版gamemode指令_【服务器相关】【求助!】关于服务器中使用gamemode等命令错误。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 事情是这样的 我自己开个服务器玩玩,装了一堆插件 给自己了一个op 不知道怎么,TMI内置修改器每一个指令都不能用了,客户端里红字提示an interna ...

最新文章

  1. WMI技术介绍和应用——查询快捷方式、映射磁盘和虚拟内存信息
  2. 本地预览图片html和js例子
  3. TF之RNN:实现利用scope.reuse_variables()告诉TF想重复利用RNN的参数的案例
  4. HBase shell 中的十六进制数值表示
  5. phpstorm如何回滚。并取消本地提交
  6. 带前导0的数字三角形(洛谷P5721题题解,Java语言描述)
  7. python调用外部程序 退出_Python调用外部程序——os.system()和subprocess.call
  8. java webservice 开发总结
  9. MC9S12XS128 事件处理
  10. 外卖行业现状分析_2020年中国外卖行业市场现状和发展趋势分析 外卖下沉趋势明显【组图】...
  11. 拍拍熊(APT-C-37),诱导方式、DNS、安卓远控
  12. w7计算机文件夹打开怎么设置密码,w7文件夹怎么设密码_w7文件夹设置密码操作方法...
  13. 软件脱壳常见的几种方法
  14. Oracle | 初级-第一章 Oracle概述
  15. Ubuntu找不到wifi适配器问题及解决办法
  16. 图应用:骑士周游问题
  17. 心碎的图案怎么用c语言编出来,教案实验2用c语言编写简单程序.doc
  18. P352作业10-P360复习
  19. 墨水屏(电子纸)刷新模式
  20. 视频接口系列(二)--------VESA 标准下的 VGA、SVGA、XGA、SXGA、UXGA区别

热门文章

  1. 【前端】Vue2全家桶案例《看漫画》之六、图片阅读页
  2. 单例 Start BlueStacks 安卓模拟器
  3. php 以自动打字程序,【图片】vbs程序 表白小姐姐 自动打字!_vbs吧_百度贴吧...
  4. 整理了35个快速开发平台,前后端都有 ,接私活拿来即用,非常方便!
  5. [博创智联]创新创客智能硬件平台——温湿度传感器
  6. 台式计算机噪声,台式电脑噪音大的原因
  7. 暴风影音成病毒最新攻击对象
  8. 天梯赛 L2-014 列车调度
  9. 银河麒麟V10 SP2搭建vsftp服务
  10. 现在的种草APP还能开发吗?该如何开发?