簡體   English   中英

SingalR中的消息順序 - 如何確保它

[英]Order of messages in SingalR - how to ensure it

我在一個應用程序中使用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機制,確保我在另一個客戶端上以正確的順序接收消息,或者我是否需要編寫我自己的機制(服務器或客戶端)重新排序消息,如果他們是不正常的 - 如果是的話,是否有一個已經存在的庫?

你需要編寫自己的機制。 客戶端B中的SignalR無法知道客戶端A發送客戶端消息的順序,因為有許多事情可能會延遲特定消息的到達,如網絡延遲,SignalR唯一可以保證的是消息的順序到達。

如果你真的需要知道消息的原始順序,你可以在消息中放入一個計數,然后讓客戶端B對它們進行排序。 但是我建議你嘗試另一種方法,因為保證交付順序並不是一件容易的事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM