关于 c#:SignalR 限制连接数

SignalR limit connection count

我正在使用 SingalR OWIN 项目,并且一次寻找 limit the number of connected clients

我有以下跟踪连接数的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
public override Task OnConnected()
if (ConnectionManager.IsAllowed) // checks number of connected clients < 3
{
    ConnectionManager.connectedClients++;
    _log.Debug("Connected =" + ConnectionManager.connectedClients);
    return base.OnConnected();
}
else
{
    return null; // I thought this would reject the incoming connection
                  // but it does not.
}
}

有谁知道我需要做什么来拒绝传入的新连接?我在网上找不到任何示例。

任何建议都会很棒。

谢谢。


我不是 SignalR 方面的专家,如果其他人有内置方式,我很乐意删除它,但我只是让我的函数以某种方式表明连接被拒绝。例如,您可以返回一个布尔值并检查客户端是否允许,然后采取相应措施。如果您需要在已连接的情况下返回某些内容,请返回包含 bool IsSuccess 和您要返回的任何类型的属性的复杂类型,然后再次检查客户端是否 IsSuccess 为真。无论如何,SignalR 主动拒绝连接并不会做更多的事情。除非您当然希望,例如,如果客户端在达到限制后连接,则抛出 404。

如果有一些通过 web.config 的内置方法来设置连接限制,我不会感到惊讶,但我就是这样做的。然后你也有更多的控制权。例如,如果您愿意,您可以告诉客户有多少人连接。举个例子。

编辑:

我最初没有意识到你在 OnConnected 方法中。同样,可以想象有更好的选择,例如,如果您在该方法中抛出异常,我不知道会发生什么。但是在我见过的大多数 SignalR 的实际实现中,都有一种你自己编写的"入口方法"。例如,客户可能会呼叫并请求加入特定的聊天室,这是典型的例子。我会亲自把支票放在那里。然后你可以简单地返回一个 bool 是否允许他们进入。

即使您还没有其中之一,您也可以随时为 BeginListening 添加一些内容并在那里进行检查。