我在一个在短时间内发送大量消息的应用程序中使用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);
}
我不确定这有多大帮助,因为每次我从客户端A拨打电话时,singalR都应该创建一个新的集线器实例。 它唯一能做的就是等待singalR完成它在服务器上所做的一切,以便将消息发送到另一个客户端并通知客户端A.
所以我的问题是 - 有一个 singalR 或asp.net机制,确保我在另一个客户端上以正确的顺序接收消息,或者我是否需要编写自己的机制(服务器或客户端)如果消息乱序则重新排序 - 如果是这样,是否有一个已经存在的库?
答案 0 :(得分:1)
您需要编写自己的机制。客户端B中的SignalR无法知道客户端A发送客户端消息的顺序,因为有许多事情可能会延迟特定消息的到达,如网络延迟,SignalR唯一可以保证的是消息的顺序到达。
如果你真的需要知道消息的原始顺序,你可以在消息中加一个计数,然后让客户B对它们进行排序。但是我建议你尝试另一种方法,因为保证交付顺序并不是一件容易的事。