房间建筑 SmartFoxServer 2X

房间建筑

Room对象是任何多人应用程序结构中最重要的构建块之一。它负责将用户分组和连接在一起,并使他们相互交互。从开发人员的角度来看,它提供了有助于构建应用程序逻辑的有用事件,每个房间都可以由不同的服务器端扩展来管理。

在本章中,我们将剖析由Room对象提供的许多功能以及SFS2X框架中提供的新功能。
»一般建筑

我们在本文档的其他文章中提到了SFS2X中的新关键元素,房间组:

上面的图表应该说明这些房间组是什么。我们可以看到房间仍然包含在该区域,它们看起来像是在“同一层”。这实际上是代表房间组的一般结构的最佳方法:事实上,一个组只是一个额外的ID应用于每个房间,作为“类别”,从而允许过滤和分离。

这个新功能允许客户端将整个区域结构的本地视图限制在一个或多个组中,而不是整个目录。使用情况是无数的:分离不同类型的游戏室,创建应用的不同区域,隐藏某些类型用户的某些房间等。

房间分组的优点在于,我们可以将发送给客户端的房间数据最小化,并减少更新事件的数量,使应用程序更有效率。
房间类型

SFS2X提供三种类型的客房:常规游戏和MMO,每种类型的房间具有比以前的SmartFoxServer 1.x更高的每个设置的控制水平。随着新的能力,设置一个房间的每一分钟的细节,开发人员能够快速创建许多不同的行为,复杂的交互和复杂的结构为所有类型的游戏。

在SFS2X中推出的新房间功能中,我们可以在运行时动态重命名,调整大小和锁定/解锁每个房间。此外,我们现在可以选择房间将发送给客户的哪些事件,并精确控制房间的生命周期。

像往常一样,房间变量可用于存储自定义数据,并且已经介绍了新的功能(稍后再介绍)。最后,服务器API提供了高级功能,通过自定义标准,匹配制作,挑战,邀请等等来搜索房间。
»游戏室

游戏室是一种特殊类型的客房,附加功能:

将玩家ID自动分配给每个玩家(在基于回合的游戏中特别有用)
支持玩家和观众,分别计算。观众没有分配玩家ID。
默认情况下,当所有玩家离开房间时,游戏室的生命周期都会结束

»MMO客房

MMO客房通过添加兴趣区域(简称AoI)来扩展常规客房的功能,以确定用户将收到的活动范围。 AoI参数表示用户将彼此影响的区域,例如发送公共消息,更新用户变量等。MMO房间特别适合大型虚拟世界,其中数千名玩家正在大型地图上进行探索和交互,最小化网络开销。
»介绍房间设置

为了创建一个如本文所述的房间,只有一些强制参数,如果您对更高级的选项不感兴趣,所有其他参数都可以保留为默认值。

让我们看看所有可用的设置,它们都包含在RoomSettings类中(请参阅API文档)。所有这些设置都可以在客户端和服务器端都可用,尽管在客户端方面,其中一些设置仅限于防止恶意代码对垃圾邮件或其他恶意攻击造成的损害。
“ 基本设置

以下是所有基本设置的列表。

名称:房间的名称,必须是唯一的
密码:如果指定了密码,房间将变为私有(可选)
maxUsers:房间允许的最大用户数(可选,默认为20)
maxVariablesAllowed:房间允许的房间变量的最大数量(可选,默认为5)
isGame:如果该房间将用于游戏,该标志应设置为true(可选)
maxSpectators:如果这是一个游戏室,您应该配置允许里面有多少观众(可选,默认为0)

房间变量

房间变量是在房间中存储自定义数据以维护应用程序状态的有用工具。这些变量在“房间”中的所有用户之间自动同步,使其成为快速更改传播给所有玩家的游戏状态,分数和其他值的强大工具。

SFS2X API还提供多种设置来控制每个Room Variable的访问,生命周期和可见性。让我们看看RoomVariable的每个属性。

name:变量的唯一名称
isPrivate:如果设置,R.V.只能由其创建者修改或删除(可选,默认为false)
isPersistent:默认情况下,用户创建R.V.当用户离开时从房间中删除。如果该标志被打开,则R.V.将持续到用户注销或断开连接(可选,默认为false)
isGlobal:默认为R.V.更新将发送到房间中的所有用户。全球R.V.也在房间外更新到同一房间组中的所有用户(可选,默认为false)
isHidden:如果设置R.V.将仅在服务端可用,并且不会在客户端发送(可选,默认为false)
值:R.V.的值支持以下类型:
    Boolean 布尔值
    Integer 整数
    Double 双
    String 串
    SFSObject
    SFSArray
    Null(这不是一种类型的,但值得一提的是因为它用于删除R.V;实际上当R.V.设置为null时,它将从房间中删除)

在服务器端可以创建由SmartFoxServer实例本身拥有的房间变量。这就像一个永远不会离开系统的“虚拟用户”,从而允许创建永远不会被删除的房间变量。为了做到这一点,你需要传递null作为变量的所有者。
»服务器端扩展

服务器端扩展可以在创建时动态插入到房间中。这使得开发人员可以将自定义逻辑附加到房间并控制其使用。通常用于运行游戏,实现高级模式控制,过滤消息和更多吨。

有关扩展的全面讨论,请务必查阅服务器端扩展文章。
»房间微调设置
»权限和事件

创建新房间时,房间活动和权限可以进行微调。以下事件可用。

USER_ENTER_EVENT:切换加入房间的新用户的通知(默认为true)
USER_EXIT_EVENT:切换离开房间的用户的通知(默认为true)
USER_COUNT_CHANGE_EVENT:切换订阅群组中所有房间的用户和观众人数的通知(默认为true)
USER_VARIABLES_UPDATE_EVENT:切换用户变量更新的通知(默认为true)

注1#
USER_COUNT_CHANGE_EVENT事件可以通过指定通知这些更新的频率,在Zone级别进一步细化。默认是实时的,所以一旦发生。为了节省带宽,您可能希望将这些更新减少到每秒1次或更少。检查AdminTool中的Zone Configurator以了解更多信息。

笔记2
应始终使用USER_ENTER和USER_EXIT事件。如果你决定把另外一个关掉,那么也应该和他们同一个通知的两边一样设置。

这是可用的权限列表。

ROOM_NAME_CHANGE:切换房间创建者在运行时更改房间名称的功能
PASSWORD_STATE_CHANGE:切换房间创建者添加,删除或修改房间密码的功能
PUBLIC_MESSAGES:切换发送公共消息的功能
CAPACITY_CHANGE:切换房间创建者在runtim调整房间大小的能力。可以“缩小”房间容量,以便maxUsers <用户数量:在这种情况下,“额外”用户不会发生任何事情。一旦客户离开房间,用户计数将降低到新的maxUsers值。
坏话过滤器

如果在Zone级别配置了字词过滤器,则开发人员可以将其应用于在房间中交换的公共消息。
播放器ID发生器

最后,对于非常先进的游戏逻辑,开发人员可以提供一个替代的PlayerId Generator类,它使用自定义代码来处理和分发房间中的玩家ID。 该类需要实现SFS2X服务器端API中提供的com.smartfoxserver.v2.util.IPlayerIdGenerator类。
“ 更多资源

如果您想了解有关我们在本概述中提出的许多方面的更多详细信息,我们建议这些文章:

 房间变量
 SFSGame API
 MMO客房

翻译自http://docs2x.smartfoxserver.com/DevelopmentBasics/room-architecture

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值