【问题标题】:SignalR create groups from an arraySignalR 从数组创建组
【发布时间】:2016-09-22 01:00:28
【问题描述】:

我可以看到创建组的方式为:

public Task CreateGroup(string group)
{
    return Groups.Add(Context.ConnectionId, group);
}

如何为实体 Channel(具有 Id 和 Name 属性)的 Ids 创建一个组数组,即使我拥有的唯一连接 ID 是 context.ConnectionId
(使用Task 语法编辑)

如果我有一组组名,我希望能够在此基础上创建组。有点像...

public void CreateGroups(string[] groups)
{
    Groups.AddRange(Context.ConnectionId, groups);
}

【问题讨论】:

  • 您能解释一下您想要实现的更多目标吗?谢谢!
  • 为什么不直接遍历它?
  • 我使用正确的任务语法对其进行了编辑。如果我在方法主体中添加一组组,我不确定要返回什么

标签: asp.net-web-api signalr signalr-hub signalr-2


【解决方案1】:

你可以这样做:

public async Task CreateGroup(string[] groups)
{
    foreach (var group in groups)
    {
        await Groups.Add(Context.ConnectionId, group);
    }
}

但是,将客户端添加到多个组时需要注意。在客户端和服务器之间发送组成员身份的方式是 groupsToken,它是连接所属组的加密和编码列表。一旦一个连接属于许多组,groupsToken 就会变得很长。由于 groupsToken 是在某些操作的查询字符串中发送的(最明显的是重新连接,或者在每个轮询请求的 longPolling 的情况下),如果它变得太长,请求可能会由于 url 太长而失败。

【讨论】:

  • 哇,我不知道,我正在考虑一种验证组成员身份的方法,这样客户就可以留在他们指定的组中(否则他们会出错)。此外,当我们使用自己的令牌建立安全的 signalR 连接时,会在创建组时交换组令牌吗?
  • 如果您问这个问题,我认为您不能提供自己的 groupsToken - 服务器需要能够解密令牌,因此您必须使用相同的密钥对其进行加密。此外,如果组成员身份发生更改,服务器会将新的 groupsToken 推送到客户端。无论如何,提供您自己的 groupsToken 都不是受支持的场景,如果您试图破解系统,您几乎只能靠自己。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 2017-02-24
  • 2015-12-01
  • 2014-11-03
相关资源
最近更新 更多