我正在構建一個相當簡單的單頁應用程序。它基本上是一個項目列表,其中每個項目都有一些細節,活動日誌和當前狀態以及一些按鈕,以觸發服務器上的操作以沿着工作流程推進狀態。用SignalR替換REST端點的缺點?
它最初是使用MVC和REST/Web API編寫的,但我陷入了保持併發用戶最新的問題。例如,如果用戶A添加了一個項目,我們希望用戶B的屏幕上的列表現在更新以包含它。
爲了解決這個問題,我研究了很好的SignalR。但我有一個問題。
- 添加項目(使用POST)時,回調會在請求客戶端添加項目。這可以。
- 然後我在服務器上觸發了一個SignalR廣播,告訴所有客戶有關這個新項目。除了本地客戶端,現在有2個項目,這工作得很好。
我正在研究過濾重複id客戶端,或發送連接id與POST,然後廣播到除請求者之外的所有客戶端,但它似乎有點不必要地複雜。
相反,我只是這樣做。
public class UpdateHub : Hub
{
public void AddNewItem(NewItem item)
{
// and some server-side stuff, persist in the data store, etc
item.trackingID = new Guid();
item.addLogEntry("new item");
// ...
dataStore.addItem(item);
// send message type and data payload
Clients.All.broadcastMessage("add", item);
}
}
似乎簡單得多,只是得到完全擺脫所有的REST的東西,所以我錯過了什麼重要的東西?
它將運行在少數使用IE11 +的用戶的內部網上,我想我們確實會在HTTP響應代碼的周圍丟失一些常見的語義錯誤處理,但我不認爲這是一個巨大的交易情況。
簡單的解決方案刪除_When添加一個項目(使用POST)回調添加請求客戶端上的項目。這很好._只需用signalr添加項目。 –