SmartFoxServer 2X区和房间建筑

»区和房间建筑

SmartFoxServer 2X针对SmartFoxServer 1.x引入了区域和房间配置方式的重大改进。 特别是我们建立了一个新的简单概念,称为房间组,允许将房间组织成逻辑组,彼此分离。 用户将能够订阅他们感兴趣的群组中发生的事件,忽略所有其他群组。

这种方法的主要优点是由服务器发送的初始房间列表将更小,并且向每个客户端发起的事件的数量被大大减少,特别是在高流量应用的情况下。

一个例子将阐明这个概念:这里写图片描述
用户最初可以预订大厅组并且仅接收该组下的房间的房间更新(例如新创建或移除的房间,用户计数更改和房间变量更新)。
如果用户对玩游戏感兴趣,他可以订阅其他游戏组之一,看看哪些游戏可用并加入他们。用户还可以随时取消订阅任何组。用户甚至可以避免订阅任何组,并仍然能够加入区域中的任何房间,虽然他不会收到未加入的房间的任何更新。

新的方法,结合区域和房间配置(更多在后面)的更细粒度水平,允许应用程序设计师创建高度复杂的系统与多个游说,游戏,个人空间,私人区域等。新功能还提供了更合理和有组织的方式来管理区域中的数千个房间,同时将客户端更新的数量保持在最低限度。

以下列表描述了几种不同的可能情况。

用户加入区域而不订阅任何会议室组:在这种情况下,用户将收到一个空的会议室列表,服务器不会更新任何会议室事件。这是一个很好的设置,当你想让用户与您的服务器端扩展,而不必接收不必要的房间更新。典型的用例是用户注册表,咨询用户搜索功能或其他用户简档相关活动,其中不需要与其他客户端的交互。

用户加入区域并订阅一个初始房间组:这可能是最常见的用例,并且非常类似于SmartFoxServer 1.x。这里的区别是,房间列表将仅包含所选组中的房间,并将过滤掉所有其他房间。默认情况下,客户端将更新有关新创建或删除的房间。开发人员还将能够配置其他事件,如用户计数更新,房间变量更新等。

用户加入区域并订阅多个房间组:订阅多个组允许更复杂的房间过滤。玩家将能够获得由所选组中的房间组成的自定义房间列表。通常,客户端将加入大厅组,可能是具有特定主题的聊天组,以及可以寻找游戏来玩游戏的游戏组。

最后组可以在运行时创建,并动态订阅/取消订阅。
»细粒度区域和房间活动

使用SmartFoxServer 2X,您可以更好地控制每个区域和房间发生的事件。
这是管理工具中Room配置的一个示例:
这里写图片描述
上述界面显示了在创建新房间时如何微调每个Room级别活动和权限。根据上述配置,用户将能够更改房间的名称和密码,而调整大小(容量更改)将被拒绝。房间内还允许公共信息,所有可用的活动将被通知。
在另一个房间中,您可能需要不同地配置这些设置,抑制一些事件并提供一组不同的权限。

客房定义两类设置:权限和事件。

权限指示在运行时可以执行哪些与房间相关的操作。

ROOM_NAME_CHANGE:确定是否可以在运行时更改房间名称
PASSWORD_STATE_CHANGE:确定在运行时是否可以更改/删除Room密码
PUBLIC_MESSAGES:确定房间是否支持公共消息
CAPACITY_CHANGE:确定是否可以在运行时修改房间容量

事件指示房间将通知加入的客户的事件。

USER_ENTER_EVENT:确定在用户加入会议室时是否应发送更新
USER_EXIT_EVENT:确定在用户离开会议室时是否应发送更新
USER_COUNT_CHANGE_EVENT:确定每当Room内的用户数量发生变化时是否应触发事件
USER_VARIABLES_UPDATE_EVENT:确定在用户设置其用户变量时是否应发送更新

最后,客房有一种新的方式来定义他们的移除模式,这表示是否和何时应该自动移除房间。以下设置可用。

默认值:房间根据SmartFoxServer 1.x中已存在的默认规则删除:常规房间在空时删除,创建者脱机,游戏室将在空时删除
When_Empty:当房间为空时,房间被删除
When_Empty_And_Creator_Is_Gone:当空房间及其创建者脱机时,房间将被删除
Never_Remove:房间永远不会自动删除

»用户计数更新

SmartFoxServer中最大的带宽占用更新是用户计数更新事件,每次在任何Room内的用户数量发生变化时,所有用户都会触发该事件。在交通繁忙的情况下,这个事件可能每秒被触发几十次,导致显着的带宽消耗和丢弃消息问题。

SmartFoxServer 2X引入了几个引擎级优化,在很大程度上减少了用户计数更新的影响。

分组优先级:SmartFoxServer 2X引擎(代号为Bitswarm)允许为每个分组指定优先级,允许低优先级响应(如用户计数更新)在客户端队列过于繁忙时被丢弃。当客户端使用缓慢的连接时,这显着减少了丢弃消息的问题。

用户计数更新限制:为了进一步提高对此事件的控制级别,SmartFoxServer 2X可以配置为通过聚合消息并仅发送重要消息来“减慢”发送这些更新的速度。换句话说,你可以指定一个特定的时间间隔,在该时间间隔之后应该触发事件。两个时间间隔之间的所有更新将被舍弃丢弃的时间。

为了更好地了解节流系统的工作原理,让我们假设我们将间隔设置为2000毫秒。这是在两个间隔之间发生:

大堂客房(10/20)
大堂客房(11/20)
大堂客房(12/20)
HipHop聊天(33/35)
HipHop聊天(32/35)
HipHop聊天(31/35)

这是真正发送作为更新在下一个间隔:

大堂客房(12/20)
HipHop聊天(31/35)

仅传输最新的最新用户计数,并且所有剩余的用户计数被过滤掉。
»房间变量和用户变量
SmartFoxServer 2X在房间/用户变量方面引入了显着改进,在客户端和服务器端增加了更多的灵活性。
最需要的增强之一是支持嵌套对象,我们已经添加了。现在完全支持数组和字典。我们还添加了以下两个新设置。

隐藏:当房间/用户变量被隐藏时,它将永远不会被发送到客户端。这允许决定哪些变量仅在服务器端,哪些变量与客户端保持同步。新功能消除了将自定义数据附加到Room / User对象的两种不同方法的需要。以前在SmartFoxServer 1.x中,您有房间/用户变量和房间/用户属性。使用SmartFoxServer 2X,所有自定义数据都通过房间/用户变量进行处理。

全局:此标志仅适用于Room Variables。全局房间变量在区域级别更新,换句话说,在房间外部。这意味着设置为全局的房间变量将在同一房间组中的所有客户端上更新。这是另一个期待已久的功能,已被问过很多次。
这是一个如何在扩展中设置房间变量的快速示例:
private void setSomeVariables(Room room, User owner)
{
    List<RoomVariable> listOfVars = new ArrayList<RoomVariable>();
    listOfVars.add( new SFSRoomVariable("bgImage", "coolBackground.jpg") );
    listOfVars.add( new SFSRoomVariable("stars", 4) );

    RoomVariable hiddenVar = new SFSRoomVariable("isPremiumUsersOnly", true);
    hiddenVar.setHidden(true);
    listOfVars.add(hiddenVar);

    // Set variables
    sfsApi.setRoomVariables(owner, room, listOfVars)
}

正如你可以看到,称为hiddenVar的房间变量被标记为隐藏,它不会传输到客户端。 服务器端代码将能够检查它,并查看房间是否仅为高级用户。

在客户端(ActionScript 3),设置变量同样很简单:

private function setSomeVariables(room:Room):void
{
    var listOfVars:Array = new Array()

    listOfVars.push( new SFSRoomVariable("bgImage", "coolBackground.jpg") )
    listOfVars.push( new SFSRoomVariable("stars", 4) )

    // nested object
    var chatSettings:SFSObject = new SFSObject()
    chatSettings.putUtfStringArray("allowedFonts", ["Verdana", "Arial", "Times New Roman"])
    chatSettings.putIntArray("allowedFontSizes", [10,11,12,13])
    chatSettings.putBool("isBoldAllowed", true)
    chatSettings.putBool("isItalicAllowed", true)
    chatSettings.putBool("isUnderlineAllowed", false)

    listOfVars.push( new SFSRoomVariable("settings", chatSettings))

    // Set variables
    sfs.send( new SetRoomVariablesRequest(listOfVars, room) )
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值