创建通道时将活动连接添加到通道

Add active connections to channel when it's created

我试图阻止谁可以看到特定页面的事件,因此我正在确定并存储哪些用户可以访问特定页面的 ID。在 channels.js 中,我可以通过像这样遍历页面来将用户添加到 app.on('connection') 中的新页面级频道:app.channel('page-' + pageId).join(连接)

问题是用户在刷新浏览器并重新连接之前不会开始从该页面接收广播。

我想要发生的是在创建页面时让允许的用户的所有连接开始接收广播。在 channels.js 中有没有办法做到这一点,或者我可以在页面创建的挂钩中告诉它向谁开始广播吗?

正在编辑以添加我最后尝试的内容。 "Users-pages" 是链接用户和页面的关联实体。

app.service('users-pages').on('created', userPage => {
    const { connections } = app.channel(app.channels).filter(connection =>
      connection.user.id === userPage.userId
    )
    app.channel('page-' + userPage.pageId).join(connections)
})

keeping channels updated 文档应该有您正在寻找的答案。它使用 users 服务,但可以相应地更新页面,如下所示:

app.service('pages').on('created', page => {
  // Assuming there is a reference of `users` on the page object
  page.users.forEach(user => {
    // Find all connections for this user
    const { connections } = app.channel(app.channels).filter(connection =>
      connection.user._id === user._id
    );

    app.channel('page-' + pageId).join(connections);
  });
});

使用 app.channel('page-' + pageId).join(connections) 不适用于我。但是遍历每个连接都可以正常工作:

connections.forEach(connection => {
  app.channel('page-' + userPage.pageId).join(connection)
})