在 Fluid DataObject 中避免 "Ghost" 个客户端

Avoiding "Ghost" Clients in a Fluid DataObject

我注意到的一件奇怪的事情是,当您尝试使用 Fluid Framework 执行“多光标”之类的事情时,您可能会尝试使用运行时的 Audience 或 Quorum 为每个用户建模(即在 DataObject、运行 this.runtime.getAudience()this.runtime.getQuorum() 中)。您可以使用

跟踪用户 entering/leaving

这通常会导致很多 basic/naive 示例带有“幽灵”光标,您实际上可以在 Fluid playground 示例中看到它。我想我有两个问题

IAudiences/IQuorums 是不是太抽象了?有什么方法可以判断添加的客户端是否是真实的“人”?

我看到 audience.on("addMember") 为其回调提供了一个 details 参数,所以这似乎是可能的,但目前还没有很好的记录。

Fluid Framework 容器中的“幽灵”客户端是 summarizers 或其他非人工连接的客户端。这些汇总器客户端已自动添加以汇总容器的当前状态。

当前的受众和法定人数 API 表面 绝对 是原始的。它们是 Fluid Framework 代码库中一个活跃的改进领域。 (An early PR was opened today.)

以下方法演示了如何使用当前 API 表面获取所有人类用户。你可以说他们是“非人类”,因为人类客户被标记为“互动”。

function getHumans() {
    const allMembers: IAudience = this.runtime.getAudience().getMembers();
    const justHumans = new Map<string, IClient>();

    allMembers.forEach((value, key) => {
        if (value.details.capabilities.interactive) {
            justHumans.set(key, value);
        }
    })
    return justHumans;
}

关于为什么我们有单独的总结客户的一些背景信息...

虽然人类客户端可以生成摘要,但将摘要客户端分开可以更轻松地将摘要器托管在不同的进程(服务工作者)或云中的节点进程上。

摘要的记录相当完善here,但它们是操作流之上的抽象,以缩短加载时间。