0

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

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

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

我执行了以下代码

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

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

4

1 回答 1

2

如果您想将这 10 条不同的消息组合成一个 PersistentResponse,SignalR 不会公开执行此操作的方法。但是,如果负载高到足以导致 SignalR 一次性将多条消息拉出总线,SignalR 将自动将消息组合成单个 PersistentResonse。

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

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

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

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

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

于 2013-01-16T22:59:45.970 回答