每个用户的SignalR队列限制

时间:2016-09-27 14:32:21

标签: asynchronous async-await signalr

我有这段代码来测试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测试它。 我犯了一些错误或是信号限制?

2 个答案:

答案 0 :(得分:1)

您最有可能达到浏览器限制。使用longPolling和serverSentEvent传输时,每个send都是一个单独的HTTP请求。由于您要延迟响应,因此这些请求的运行时间更长,并且浏览器限制了可以打开多少并发连接。达到限制后,在完成之前的连接之前,新连接将不会打开。 关于并发请求限制的更多细节: Max parallel http connections in a browser?

答案 1 :(得分:0)

那不是signalR的感觉,你在等待长时间运行"任务。对于那个signalR支持服务器推送机制。 因此,如果您有需要更多时间的东西,您可以从客户端触发此操作。 在计算完成的情况下,您可以从服务器向客户端发送消息。