传统 MMORPG 通讯模式实现的一点想法

操作方法

  • 01

    既然 MMORPG 都有千篇一律同质化的趋势,好歹我们技术人员也应该总结出点东西来,新项目开发可以用现成的模式。 一般来说,MMORPG 服务器要解决的问题无非是,同步玩家的位置,状态,把这些信息广播出去(细分的话,有非战斗环境和战斗环境);需要建立一个聊天服务,供玩家文字交流;有一个信息发布渠道;有任务 NPC 和玩家一对一交流;玩家调整自己的装备(也可以看成是和一特定 NPC 交流)。 以上,我们领测国际可以看到几个基本需求是可以正交分解出来,并有不同的实现方式的。 同步玩家的状态,基本上是由玩家自己不断提交自己的最新状态,然后由服务器把这些信息广播给其他人。 聊天服务比较成熟,基本上就是玩家订阅聊天频道,并按权限向频道内发布信息。 信息发布可以看成是一个特殊的聊天频道。 任务 NPC 或是整理自己装备,都类似于向特定节点做请求等待回复。 我经历的几个 MMO 项目都实现的比较简单,无论是 server 还是 client ,都是跑一个消息循环,对每个到来的消息包进行处理。通常都是一个 timer 消息源和一个网络包消息源,共同组成最终的消息源,主程序是标准的消息循环分发结构。 但对比前面的需求,可以看到,这些方式略显简陋。最后能再此基础上再做一个层次的封装工作,让这些不同的需求可以分开处理。更方便的解决一些有状态的需求,或是能够对信息处理进行优先级排序。 最近一段时间,我受 zeromq 的设计思想影响较多。对于未来的项目设计方法,我有一些想法需要梳理一下。 玩家 Client 和游戏 Server 方面,我还是倾向于采用单一的 TCP 连接。但是希望再其上加一个层次。可以在单一 TCP 连接上模拟多个通讯信道。实现 zeromq 提出的几个模式(的变形)。 在我看来,MMORPG 的服务器端,可以看成是若干服务的集合。那么这些服务无论布置在哪里,我都希望他们是在一个逻辑上的网络中。玩家通过网关也接入这个网络,并可以根据授权来使用网络上的服务。 抛开玩家登陆(注册)流程不谈。典型的场景是玩家在虚拟场景中漫步。这可以看成是 Client 向订阅一个指定场景的环境。订阅本身会先鉴权,服务器会查阅玩家是否有权限订阅(玩家是否在这个场景中)。场景会不断的发布场景中每个玩家,NPC 的动态。订阅者将不断的获得这些信息。由于性能问题,我们可以把不同类别的信息放在不同的订阅点上。订阅可以按需进行。 玩家会选择向特定场景 PUSH 自己的状态数据,按 zeromq 的模式,这应该走另一个信道。 每个可对话的 NPC 都可以看成是一个特定服务。玩家向它建立连接,然后以 Request/Reply 模式工作。这样可以方便完成带状态的任务。同样,建立连接的过程可以引入鉴权(比如说检查玩家是否在 NPC 附近等)。当然,NPC 同样需要订阅场景,当场景中和他交流的玩家跑开后,可以自动切断信道。 战斗部分的处理可以独立。以即时战斗为例,战斗计算服务订阅场景中对象的位置和动作。计算他们的动作的后果,得到每次攻击的伤害值。它自己是一个信息订阅点,玩家通过订阅战斗服务,可以了解场景中每个个体受伤害的情况。 同样,某些增值服务,比如自动寻路,都可以独立出来实现。 只是一些想法,希望整理出来后,可以有更多启发。对人也对己。

(0)

相关推荐

  • FTP 主动模式及被动模式

    FTP的特殊性: 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般 ...

  • 单向链路检测模式消除交换机误诊断

    大部分交换机都会有自我诊断的功能。当交换机或者交换机端口由于某些原因出现故障的时候,都会通过指示灯来告知管理员存在的错误。不过有些时候交换机也会存在误诊断的情况。如交换机的端口工作指示灯明明表示正常, ...

  • 什么是recovery?recovery模式又是什么意思?如何进入recovery模式

    很多Android安卓手机刷机或者刷字体需要进入recovery模式。很多新手比较迷茫!这里就说下进入方法: 什么是recovery?如何进入recovery模式? 什么是recovery。 reco ...

  • Win8.1启动后如何快速进入传统桌面无需点击桌面磁贴

    许多习惯使用传统桌面的用户一直非常希望Win8系统启动后直接进入Windows传统桌面,否则用户需要在开始屏幕点击“桌面”磁贴或者按下“Win+D”等快捷键才能进入传统桌面。现在,更新的Windows ...

  • 两步搞定win8.1开机直接进入Windows传统桌面

    体验了win8系统的新创意,很多用户都会留意到win8的桌面不再是原来的风格模式,虽然很新潮,但是很多操作就因此变得很陌生,因此如何将win8还原到传统桌面成了用户们积极探讨的问题,现在就和大家一起分 ...

  • Windows 8.1开机后可直接进入传统桌面?

    有研究员发现,在Windows 8.1 (build 9364)的twinui.dll文件里有一些代码,这些代码显示,用户或许能在即将到来的Windows 8新版本里开机启动直接进入到传统的桌面模式。 ...

  • UEFI与Legacy+UEFI启动模式的区别

    一、UEFI Bios启动模式 UEFI Bios支持两种启动模式:Legacy+UEFI启动模式和UEFI启动模式,其中Legacy+UEFI启动模指的是UEFI和传统BIOS共存模式,可以兼容传统 ...

  • 怎么让Win8.1启动后直接进入传统桌面

    许多习惯使用传统桌面的用户一直非常希望Win8系统启动后直接进入Windows传统桌面,否则用户需要在开始屏幕点击“桌面”磁贴或者按下“Win+D”等快捷键才能进入传统桌面。现在,更新的Windows ...

  • ART模式和Dalvik模式

    ART模式ART模式英文全称为:Android runtime,谷歌Android 4.4系统新增的一种应用运行模式,与传统的Dalvik模式不同,ART模式可以实现更为流畅的安卓系统体验,对于大家来 ...