如何减少信号器中的额外响应?

时间:2013-01-16 21:11:11

标签: asp.net signalr

我做了一个聊天项目。 当任何人发送消息时,我运行此代码为所有客户端发送消息

public void SendMessage(string message)
{
  Clients.RecieveMessage(message);
}

但是当10个用户同时发送消息时,所有客户端都会得到10个响应 如何优化和减少这种反应?

我执行了以下代码

public void SendMessage(string message)
{
  Clients.RecieveMessage(message);
  Clients.RecieveMessage("Test");
}

但我对每条消息都有单独的回复 为什么SignalR没有结合这些反应?如何将这些消息合并为一个响应?

1 个答案:

答案 0 :(得分:2)

如果要将这10条不同的消息合并为一个PersistentResponse,SignalR不会提供一种方法来执行此操作。但是,如果负载足够高,SignalR会自动将消息组合成单个PersistentResonse,从而导致SignalR一次性从总线上拉出多条消息。

基本上,SignalR会根据需要动态减少响应以处理负载,所有这些对于服务器和客户端上的SignalR开发人员都应该是完全透明的。

如果问题是您认为使用长轮询传输的客户端过于频繁地发出请求,则可以手动设置LongPollDelay。默认情况下,长轮询客户端将在收到消息后立即重新连接。使用非零LongPollDelay,客户端将在延迟过后重新连接。

// Set long-polling reconnect delay to two seconds (stored in milliseconds)
SignalR.Transports.LongPollingTransport.LongPollDelay = 2000;

在延迟期间发送的所有消息将立即返回到后续请求中的长轮询客户端。如果在LongPollDelay期间始终发送消息,这有效地将长轮询传输转换为正常轮询传输。

自然这样做会增加延迟。我还应该注意,LongPollDelay仅在JavaScript客户端上受到尊重。因此,如果您使用的是.NET客户端,即使在更改此设置后,它也会在收到响应后立即重新连接。