【问题标题】:How to reduce extra response in signalr?如何减少信号器中的额外响应?
【发布时间】:2013-01-18 03:56:45
【问题描述】:

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

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

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

我执行了以下代码

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

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

【问题讨论】:

  • “当 10 个用户同时发送消息时,所有客户端都会收到 10 个响应”我想这意味着 SignalR 正在正确地完成它的工作。你到底想要什么?不明显。

标签: asp.net signalr


【解决方案1】:

如果您想将这 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 客户端,即使更改此设置,它也会在收到响应后立即继续重新连接。

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多