每个用户的 SignalR 队列限制

SignalR queue limit per user

我有这段代码可以在 SignalR 中测试异步编程。此代码在 10 秒后将文本发送回客户端。

public class TestHub : Hub
{
    public async Task BroadcastMessage(string text)
    {
        await DelayResponse(text);
    }

    async Task DelayResponse(string text)
    {
        await Task.Delay(10000);
        Clients.All.displayText(text);
    }
}

此代码工作正常,但存在意外行为。当在不到 10 秒内发送 5 条消息时,客户端无法发送更多消息,直到之前的 "DelayResponse" 方法结束。它发生在每个连接上,如果在 10 秒之前关闭连接并重新打开它,客户端可以再次发送 5 条消息。我用 chrome、firefox 和 IE 对其进行了测试。 我弄错了还是信号器限制?

您很可能达到了浏览器限制。当使用 longPolling 和 serverSentEvent 传输时,每次发送都是一个单独的 HTTP 请求。由于您延迟响应,这些请求更长 运行 并且浏览器对可以打开的并发连接数有限制。一旦达到限制,新连接将不会打开,直到之前的连接之一完成。 有关并发请求限制的更多详细信息:

这不是 signalR 的意思,您正在等待 "long running" 任务。为此,signalR 支持服务器推送机制。 因此,如果您有需要更多时间的事情,您可以从客户端触发。 如果计算完成,您可以从服务器向客户端发送消息。