【问题标题】:Meteor.js publish only to one user based on their idMeteor.js 根据他们的 id 只发布给一个用户
【发布时间】:2016-08-10 04:10:53
【问题描述】:

我正在为 Meteor 中的游戏创建一个简单的匹配系统,我的架构非常简单:我有一个服务器端集合 waitingList,它在用户等待时插入用户 ID。

当一个用户加入列表时,它会检查列表中是否有另一个用户,如果有,它应该确认两个玩家是否都准备好了,然后创建游戏。

在普通的node.js with socket.io 这将非常简单,因为每个用户都在其自己的房间我只需将消息广播到两个用户房间并让他们都收到一个准备好了吗?确认。

我是新来的流星,我有点迷茫,我怎么能只为列表中选择的两个用户发送确认,而不是为当前正在等待的所有用户发送确认?

【问题讨论】:

    标签: javascript node.js meteor


    【解决方案1】:

    我能想到的最简单的方法是将等待用户的集合发布给每个用户:

    Meteor.publish('otherWaitingUsers',()={
      return Meteor.users.find({ waiting: true, _id: { $ne: this.userId }},{ fields: { waiting: 1 }});
    });
    

    然后在客户端订阅它。如果有其他用户在等待,那么您将在客户端上看到它。

    当有很多人在等待和挑选合作伙伴时,你仍然需要处理这种情况。

    【讨论】:

    • 实际上服务器会自动从列表中选择一个用户来进行匹配,用户将无法选择对手
    • 那么你必须相应地修改上面的查询来选择这个球员的比赛。
    • 在我看来,发布整个用户集合等待每个用户有点不必要(除非流星架构要求发生这种情况)。该集合可以保留在服务器端,但只向实际加入游戏的用户发布一些消息。你认为流星可以做到吗?
    • 是的,当然,您可以发布一部分用户。查询只需要根据您的数据模型编写。您在此处发布的消息并不是准备玩游戏的用户的光标。它也是反应式的,所以当这个列表发生变化时,客户端会自动反映列表的当前状态。
    • 您可以向每个用户发布不同的用户子集。服务器上的查询可以使用this.userId - 正在订阅的登录用户的_id 进行个性化。最后,与您正在寻找的东西相同。
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多