SingalR中的消息顺序 - 如何确保它

San*_*man 6 c# asp.net real-time signalr

我在一个应用程序中使用SingalR,该应用程序在短时间内发送了大量消息.假设我有客户端A和客户端B.客户端A只发送消息而客户端B只是收听消息.客户端A按以下顺序发送以下消息:A-> B-> C-> D.

我所看到的是,客户端B有时会以不同的顺序接收消息,例如:B-> A-> C-> D

保持发送消息的顺序非常重要.我在网上看了一下,我发现有人说我应该在处理这些消息的集线器上的函数上使用async-await.

public async Task hubMethod(msgObject msg)
{
   await Clients.All.message(msg);
}
Run Code Online (Sandbox Code Playgroud)

我不确定这有多大帮助,因为每次我从客户端A拨打电话时,singalR都应该创建一个新的集线器实例.它唯一能做的就是等待singalR完成它在服务器上所做的一切,以便将消息发送到另一个客户端并通知客户端A.

所以我的问题是 - 有一个singalR或asp.net机制,确保我在另一个客户端上以正确的顺序接收消息,或者我是否需要编写我自己的机制(服务器或客户端)重新排序消息,如果他们是乱序 - 如果是的话,有没有一个库已经做到了?

Leo*_*zes 1

您需要编写自己的机制。客户端 B 中的 SignalR 无法知道客户端 A 发送客户端消息的顺序,因为有很多因素可能会延迟特定消息的到达,例如网络延迟,SignalR 唯一可以保证的是消息发送的顺序到达的。

如果您确实需要知道消息的原始顺序,您可以在消息中添加一个计数,然后让客户端 B 对它们进行排序。不过我建议你尝试另一种方法,因为保证交货顺序并不是一件容易的事。