【问题标题】:Tokbox- don't let the same user publish twiceTokbox——不要让同一个用户发布两次
【发布时间】:2016-04-10 09:31:13
【问题描述】:

如果用户正在发布到 tokbox 会话,并且由于任何原因同一用户在不同的设备上登录或在另一个浏览器窗口中重新打开会话,我想阻止第二个用户发布。

幸运的是,在流的元数据中,我保存了用户 ID,因此当存在流列表时,很容易查看现有流是否属于已登录的用户。

当发布者被初始化时,会发生以下情况:

  1. 当这种情况发生时收听session.on("streamCreated"),订阅新的流
  2. 开始发布

问题是,当会话初始化时,无法检查会话的当前流以查看该用户是否已经发布。在on("streamCreated") 回调触发之前,我们不知道流是什么。

我有一种预感,我缺少一个简单的解决方案。有什么想法吗?

【问题讨论】:

    标签: opentok tokbox


    【解决方案1】:

    我假设当您说您将用户 ID 保存在流元数据中时,这意味着当您初始化发布者时,您设置了“名称”属性。这是一项很棒的技术。

    我的想法有点小题大做,但这是我现在能想到的最好的了。我将通过基本上将流的订阅分为两个阶段来解决这个问题:

    1. 在此客户端连接之前创建的所有流
    2. 之后创建的所有流

    在 #1 期间,我会检查每个流的“名称”属性,以查看它是否属于此客户端连接处的用户。如果是这样,那么您知道他们两次进入会话并且您可以设置一个标志(让我们称之为"userRejoining"。为了知道#1 已完成,我会设置一个计时器(这就是为什么我称之为hack) 一段合理的时间,例如每次 "streamCreated" 事件到达时 1 秒,并删除之前的任何计时器。

    然后,如果未设置"userRejoining" 标志,则初始化发布者并发布到会话。

    在 #2 期间,您只需订阅任何创建的流。

    不利的一面是,您现在在任何地方都将发布的用户体验延迟了约 1 秒。在较大的团体场景中,这可能会破坏交易,但在较小的 (1:1) 类型的会话中,这应该是可以接受的。我希望这个解释清楚,如果没有,我可以尝试为您编写一些示例代码。

    【讨论】:

    • 注意:每个 Stream 都有一个“creationTime”属性,可以用来判断它是否比你自己的连接更早。我认为它在这里没有用,因为它无助于确定所有较旧的流何时完成以及何时可以确定您处于第 2 阶段(从上方)。
    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多