MMO游戏设计三:架构设计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lunar_lty/article/details/47428619

    首先要说明,这里谈的架构,并不是说游戏服务器由哪些功能服务器搭建而成,而是想重点谈谈一个好的游戏架构,应该具备哪些特质。

    对网游来说,玩家所操作的客户端数据,往往是服务端针对该玩家数据的镜像。打个比方,客户端保存了本角色的A的HP,MP等数据,服务端同样也保存了角色A的HP,MP。另外,当A的HP,MP发生变化时,需要将数据同步给客户端本人,同时也需要同步给其他能看到A的那些玩家;除了数据的同步之外,有些逻辑功能在客户端和服务端完全相同,比方说攻防计算,扣血逻辑。这些最基础的功能,在开发功能中甚至是必不可少的,但凡每增加一部分数据到角色身上,可能都要考虑此类问题。

    对一个好的游戏架构而言,最基础的功能性架构应该搭建得很好,以至于我们再添加新功能时,只需专注于新功能的逻辑,而无需再花精力在客户端和服务端的数据一致性和逻辑一致性方面。

    有关数据一致性:简单说就是同步了,代码中最常见的做法:

    1.  server: player->set_hp(hp);  // 服务端设置HP 

         sync_player(player, hp);        // 发同步消息到客户端

    2.  client: recv_sync();                 // 收到同步消息

         player->set_hp(hp);               // 客户端设置HP

     一条简单设置HP的指令,要完成同步操作就得封包,解包,客户端再设置,考虑到AOI(Area Of Interest)广播的话,那就更复杂了。

    那么,有没有一种更加智能的方式,在服务器设置好响应的操作或者数值之后,框架会“自动“同步到客户端呢?

    假定,客户端和服务端都有一个相同的”逻辑虚拟机“,所有通用的逻辑代码,在这里作一个抽象,逻辑虚拟机暴露必要的接口供客户端和服务端进行访问;那么,客户端和服务端在访问逻辑虚拟机时,只要提供的参数一致,那将会得到同样的结果,则客户端和服务端各自的逻辑虚拟机的内部数据和状态一定是一致的。

   问题是,逻辑虚拟机应该暴露怎样的接口呢?

    

猜你喜欢

转载自blog.csdn.net/Lunar_lty/article/details/47428619
今日推荐