0

我有一个视图,其中有不同的部分显示来自 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 应用程序提交新订单并将订单插入数据库时​​,我才需要刷新视图。提交新订单后,PreparedOrders、Progressitems、DisplayOrders 的值会发生变化,需要再次获取。我已经阅读了许多与观察者模式和发布者/订阅者方法相关的帖子/教程,但无法获得最适合的清晰解决方案。有人可以提供相关的指针/教程以在这种情况下使用,这可能会有所帮助。作为我的第一个项目和一个完全的初学者,我对如何进行感到很困惑。

4

1 回答 1

2

因此,如果您必须在基础发生更改时触发的事件上更新站点,因为其他客户端已经更改了它,您需要基于 PUSH 的架构,而不是像现在这样基于 PULL(计时器请求已过)。

为此,您可以使用SignalR,它实现了各种现代通信机制。基本思想是:有一次客户端访问您的站点时,会创建一个指向其浏览器的持久连接,并且在通知的那一刻,您只需滚动所有可用的客户端并通知它们。在客户端,自然会在您的情况下使用javascript.

值得一提的是,这项技术在浏览器版本控制方面存在限制,因此请参阅文档以查看支持的浏览器版本集是否满足您的要求。

这是 SignalR2 支持的平台列表的链接:支持的平台

于 2013-11-05T13:51:55.413 回答