在游戏服务器开发中, 网络通信是很关键的, 而在网络通信中,数据的同步是关键, 在我的上一篇博客(
http://www.cppblog.com/zhengxf/archive/2010/07/08/119737.html)中谈的了数据如何同步的问题, 其中提到了两点 1.数据发送给谁. 2.网络延迟的话,如何同步.
上次主要谈了网络延迟时的同步问题,今天我们主要谈论数据发送给谁的问题, 要谈论这个问题,我们就不的不谈论: 地图, NPC, 玩家他们三个之间的关系.
其实地图是个静态的数据集合, 其中主要包含了地形信息和物品信息,这里的物品指的是静态的,所以它是不需要进行同步的,也就是每个玩家在同一个地图上看到信息是一样的,所以这些信息有客户端的场景管理器管理. 不进行网络通信.
NPC: NPC主要分两种 一种是静态的NPC,如玩家获取任务的NPC, 另外玩家升级打的怪, 也是NPC. 静态的NPC有属性和功能,但不需要同步, 动态的NPC(如怪)需要进行网络同步,这里我们就有一个问题, 动态的NPC要将它的信息发送给谁呢?任何一个涉及到网络通信的NPC和玩家都有一个共同的性质就是它有可见范围,假如说一个玩家在十米范围内可见,那么他就回将信息发送给距离十米以内的玩家和NPC, 这里有含有两个问题: 一: 十米以外的NPC怎么办, 二:怎么获取十米以内的发送用户。有两种解决办法:一是在场景中搜索找到要发送的用户信息,告诉服务器让服务器来发,二是发送自己的信息到服务器,服务器搜索NPC列表,和玩家列表,来发送,我觉的后着更合理。
玩家: 玩家的同步主要是玩家和玩家的同步, 如玩家每前进一步, 就向服务器发一条消息. 服务器在玩家列表中查找到范围之内的其他玩家信息,并发送消息,这里有一个问题,是玩家要不要将消息发送给NPC?因为这种NPC也可以理解为机器人,它可以感知到敌人就在附近, 本身就在服务上, 所以不用发送消息, 但是NPC在感受到玩家的时候要向它(NPC) 可见范围内的玩家发送消息.
接下来还有一个问题,是发送什么样的消息的问题,因为针对NPC,和玩家,并不是所有的消息都发,而是有选择向的发,这个问题我们下次讨论。