gpt4 book ai didi

c# - 如何使用 SignalR 保证消息传递?

转载 作者:IT王子 更新时间:2023-10-29 04:30:42 27 4
gpt4 key购买 nike

我正在使用 C# 和 SignalR 开发实时客户端-服务器应用程序。我需要尽快向客户发送消息。我在服务器上的代码:

for (int i = 0; i < totalRecords; i++)
{
hubContext.Clients.Client(clientList[c].Key).addMessage(
serverId, RecordsList[i].type + RecordsList[i].value);
Thread.Sleep(50);
}

如果延迟 >=50 毫秒,则一切正常,但如果没有延迟或延迟小于 50 毫秒,则会丢失一些消息。我需要尽快发送消息,不要拖延。我想我需要检查是否收到了消息,并且只有在发送另一条消息之后。
如何以正确的方式做到这一点?

最佳答案

SignalR 不保证消息传递。由于 SignalR 在您调用客户端方法时不会阻塞,因此您可以像您发现的那样非常快速地调用客户端方法。不幸的是,客户端可能并不总是准备好在您发送消息后立即接收消息,因此 SignalR 必须缓冲消息。

一般来说,SignalR 最多可为每个客户端缓冲 1000 条消息。一旦客户端落后超过 1000 条消息,它将开始丢失消息。这个 DefaultMessageBufferSize 为 1000 可以增加,但这会增加 SignalR 的内存使用量,并且仍然不能保证消息传递。

http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/signalr-performance#tuning

如果你想保证消息传递,你必须自己确认它们。正如您所建议的,您可以仅在确认上一条消息后才发送消息。如果等待每条消息的 ACK 太慢,您也可以一次确认多条消息。

关于c# - 如何使用 SignalR 保证消息传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com