我正在使用SingalR OWIN项目并一次寻找limit the number of connected clients
。
我有以下代码跟踪连接数:
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.
}
}
有谁知道我需要做什么来拒绝传入的新连接?我无法在网上找到任何例子。
任何建议都会很棒。
感谢。
答案 0 :(得分:0)
我不是SignalR的专家,如果其他人有内置方式,我很乐意删除它,但我只是让我的功能以某种方式表明连接被拒绝了。例如,您可以返回一个bool并检查客户端是否允许,然后采取相应措施。如果连接时需要返回某些内容,则返回包含bool IsSuccess
的复杂类型和要返回的任何类型的属性,然后再次检查客户端是否IsSuccess
为真。无论如何,它不像SignalR主动拒绝连接会做更多的事情。例如,如果客户端在达到限制后连接,那么当然除非您正在寻找,否则抛出404.
如果有一些通过web.config设置连接限制的内置方式,我不会感到惊讶,但这就是我将如何做到的。那么你也有更多的控制权。例如,如果您愿意,您可以告诉客户端有多少人连接。仅作为一个例子。
修改强>
我原本没有意识到你使用的是OnConnected
方法。同样,可以想象有一个更好的选择,例如我不知道如果你在该方法中抛出异常会发生什么。但在我所见过的大多数SignalR的实际实现中,都有一个&#34;输入法&#34;你自己写的那种。例如,客户端可以调用和请求加入特定聊天室,如典型示例所示。我亲自把我的支票放在那里。然后,您只需返回bool
是否允许他们进入。
即使您还没有其中之一,也可以随时为BeginListening
添加内容并在那里进行检查。