我有一个视图,其中有不同的部分显示来自DB(SQL Server)的不同类型的订单。现在,每次通过Android应用程序提交新订单时,我都需要使用更新的信息刷新视图。以下是代码段:
视图模型:
public class KitchenViewModel
{
public List<Orders> DisplayOrders { get; set; }
public List<Orders> PreparedOrders { get; set; }
public List<OrderItem> ProgressItems { get; set; }
public List<OrderItem> QueuedItems { get; set; }
public int DisplayOrdCount { get; set; }
public int PreparedOrdCount { get; set; }
public int QueuedOrdCount { get; set; }
}
控制器:
public ActionResult KitchenOrder()
{
KitchenModel kitchenInstance = new KitchenModel();
List<Orders> orders = kitchenInstance.GetProgOrdersList();
List<OrderItem> progressItems = kitchenInstance.GetItemProgress();
List<OrderItem> queuedItems = kitchenInstance.GetItemQueued();
List<Orders> prepOrders = kitchenInstance.GetPrepOrdersList();
List<Orders> queuedOrders = kitchenInstance.GetQueuedOrdersList();
KitchenViewModel viewModel = new KitchenViewModel();
viewModel.PreparedOrders = prepOrders;
viewModel.ProgressItems = progressItems;
viewModel.DisplayOrders = orders;
viewModel.QueuedItems = queuedItems;
viewModel.DisplayOrdCount = orders.Count;
viewModel.PreparedOrdCount = prepOrders.Count;
viewModel.QueuedOrdCount = queuedOrders.Count;
return View(viewModel);
}
截至目前,我每15秒自动刷新视图,效果非常好。 但是,只有在通过Android应用程序提交新订单并且在DB中插入订单时,我才需要刷新视图。提交新订单后,PreparedOrders,Progressitems,DisplayOrders的值将更改,需要再次获取。我已经阅读了许多与Observer模式和发布者/订阅者方法相关的帖子/教程,但无法获得最适合的清晰解决方案。有人可以提供相关的指针/教程,以便在可能有所帮助的场景中使用。作为我的第一个项目和一个初学者,我很困惑如何继续。
答案 0 :(得分:2)
因此,如果你必须在基础上发生变化时触发的事件更新站点,因为其他客户端已经更改它,你需要基于PUSH的体系结构,而不是像你现在这样做的PULL(计时器上的请求已经过去)。
为此,您可以使用SignalR来实现各种现代通信机制。基本思路是:一次客户端访问您的网站,有一个持久性
创建指向它的浏览器的连接,并在通知的瞬间,您只需滚动所有可用的客户端并通知它们。在客户端,当然,事件是在javascript
的情况下处理的。
值得一提的是,此技术在浏览器版本控制方面存在局限性,因此请参阅文档以了解支持的浏览器版本集是否满足您的要求。
以下是SignalR2支持平台列表的链接:Supported platforms