我正在构建一个相当简单的单页应用。它基本上是一个项目列表,其中每个项目都有一些细节,活动日志和当前状态,以及一些按钮,用于触发服务器上的操作以提升工作流程中的状态。
它最初是使用MVC和REST / Web API编写的,但我遇到了使并发用户保持最新的问题。例如,如果用户A添加了一个项目,我们希望用户B的屏幕上的列表现在更新为包含它。
为了解决这个问题,我调查了SignalR,它很有效。但我有一个问题。
我正在考虑过滤重复的id客户端,或者使用POST发送连接ID,然后向请求者以外的所有客户端广播,但似乎有点不必要的复杂。
相反,我只是这样做。
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响应代码进行错误处理,但我并不认为这样做。在这种情况下,这是一笔巨大的交易。
答案 0 :(得分:1)
为了解决重复问题,您可以尝试在Hub类中使用Clients.Others,如果不在Hub类中,则使用AllExcept(id)。
Clients.Others.broadcastMessage("add", item);
在你使用SignalR的情况下,不应该有任何缺点。