在线MORPG聊天设计

在线MORPG聊天设计

还在路上,稍等... 还在路上,稍等...

介绍

MORPG实际上为多人在线聊天小游戏。如上图所示,每个人进来之后会是一个鱼的角色,点击屏幕可以在一个世界中自由游动,任何一个人都能看到周围鱼(后面称为精灵)的实时游动路径(当然,别人也能看到你),可以输入简单的文字给周围的人看到,内容显示在精灵上方若干秒,其它附加功能如等级,形象种类等等,可以实现更多的功能。

基本原理

既然为多人互动式,那么别人操作的所有指令你必须能收到,反之一样,也就是至少需要用户长连接到某台服务器通道上,其他人通过该通道发送消息和指令给你。我们实现一种最简单的方式:
这里写图片描述
用户A和用户B长连接到不同的接入服务器上。

  1. 用户A发送消息指令到接入服务器,包括信令和消息等。
  2. 接入服务器收到信令消息更新用户状态信息,主要是用户接入在哪,用户最后一次信令时间等等,这主要用户长连接保活(可以归为信令层)
  3. 如果是非消息类数据,则转发给业务逻辑处理,业务处理服务更新该用户在业务层面上,比如说鱼在地图在上的位置等等信息(可以归为业务层)
  4. 业务处理服务首先获取我需要发给谁的列表,然后获取每个用户所在的接入机器。
  5. 转发到各自的接入服务器上。

架构

还在路上,稍等...
抽分一下各个层次可以变为如下结构:

WNS(Wireless Network Service) 做手机空间时搭建的一套无线接入框架,提供最优点接入,长链接维持,在线推送,配置管理等通用能力。
逻辑Svr : 处理每个游戏角色的位置上报、消息发送、等级管理、世界信息拉取等。同时计算需要广播的对象列表,推送给PushMsg。
世界成员存储 : KEY-VALUE,存储了整个世界的成员列表,以及每个区域的成员列表(区域划分的概念后面说)
PushMsg : 负责在线推送逻辑。先在在线状态中查询到用户链接的接入机,然后将数据打包发送给对应的机器。
状态Svr : 负责处理客户端的注册、心跳请求,将客户端链接状态信息(接入机IP,端口,版本号,等)写入到在线状态存储。
在线状态 : 存储客户端链接状态信息信息。

业务的问题:

这里主要介绍一下世界成员列表以及大体的交互逻辑怎么实现:
先说一下最暴力的实现方法:每个人进入游戏之后都拉取整个世界所有成员的信息在本地初始化一个地图出来,在此之后实时的接收其它所有成员的位置信息,自己的位置也实时的上报。这样做逻辑最简单,但是随着游戏中角色数量的增长,广播消息的数量飙升可想而知,客户端的CPU、内存、网络都将成为瓶颈。
考虑到手机屏幕某一个时刻能看到的只是一个较小的区域,因此,每个角色需要“关注”的只是它周围一定范围内成员的实时信息,而距离它较远的角色的移动或者发言它是没有必要知道的。

所以设计可以一张地图,先假定把世界定一个大小,上下0到10格,每一格100*100点,世界地图总共1000*1000大小,终端屏幕定一个大小比如展示30*20个点(根据不同的屏幕大小,能显示的点数不同,但是不会超过100*100的大小),每一点为终端的最小移动点,也就是最小移动单元,如下图: 这里写图片描述 最理想的情况就是9宫格的设计了。每个精灵只需要知道周围8格中精灵的信息以及他们的消息,精灵移动也只需要推送给他们知道。 这里写图片描述
1 精灵登录:
用户精灵载入世界地图时,拉取地图信息尺寸,id等附加信息,并上报自己的位置绿色位置,并且拉取自己附近精灵的数据信息,当然可以放大为周围几个区块,也可以缩小。(主要涉及到拉取的数据量和推送的数据量的权衡,肯定是越小越好了~)
当前格子x中注册自己精灵的信息 x2y2 -> (精灵A,精灵B,精灵C。。。。。。) 具体信息有具体坐标,最后一次移动时间等等,获取x1y1,x1y2,x1y3,x2y1,x2y3,x3y1,x3y2,x3y3区域的精灵信息。
2. 位置上报:
A 位置发生移动时,用户精灵上报自己的当前位置和目的位置通知服务器,服务器通知该区域的附近精灵(通知作用),并且在满足一定条件下返回自己附近精灵的数据信息(漏掉其他精灵通知或者跨格的时候做同步作用)
没有跨区移动只需要通知9宫格中精灵,存在跨区,那么注销之前区域中自己的信息,注册新区域中自己的信息,并同步新区域9宫格中的精灵信息。
B 没有移动时定时上报 用户精灵每1分钟上报自己的当前位置,并返回附近精灵的数据。 (在线判断和同步精灵数据信息)
主要问题需要考虑注册失败导致很多僵尸精灵,需要做到一些僵尸精灵的检测逻辑。
3. 退出登录:
注销后台数据中精灵的所有信息。
这里写图片描述

好了,最简单的模型就出来了,大概就是酱紫,期待后续各种好玩的玩法吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值