【发布时间】:2016-04-23 14:31:54
【问题描述】:
我目前正在参与一个简单到中等复杂的物联网项目。我们应用程序的主要目的是从我们的设备收集数据并分析这些数据以及计算统计数据。
在服务器端,我们运行一个 MVC 应用程序。到目前为止,我们使用 Hangfire 来安排计算。 Hangfire 是一个用于安排电子邮件和其他简单事情的神奇工具,对于更高级的事情它太慢了。计算可能会占用大量时间并且是处理器密集型的(不过我们正在尝试对其进行优化),因此我们需要在后台任务中调用它们,一个简单的 API 调用是不够的。
我考虑将应用程序拆分为多个部分,网站、核心和 Windows 服务。
问题是,我以前从未尝试过,而且我不知道实现这种事情的最佳实践是什么。我搜索了示例和文章,但我发现的只是使用 Hangfire 和/或 Quartz.NET 的建议。
有没有人提供关于构建 MVC 应用程序、Windows 服务的最佳实践以及它们如何通信(可能通过队列)的任何资源?在这种情况下,最佳做法是什么?
【问题讨论】:
-
您还没有提到为什么需要(多个)Windows 服务。你想达到什么目标?假设:通过您的站点检索数据并根据后端服务中的数据进行一些计算?
-
你说得对,我忘了提到我们所有的后台任务都需要一些时间,而且我们根本无法在对 MVC 应用程序的 api 调用期间完成所有工作。我适当地编辑了我的答案
-
好吧,我还有一些问题 ;) 设备只是发布数据,不需要返回任何计算结果,是吗?所以这只是一个“一劳永逸”的动作?设备发布数据、站点联系服务、服务计算并在某处存储结果?然后稍后您或其他流程视图/流程或任何计算结果?所以我的问题的本质是:这是某种单向沟通还是结果会倒退?
-
没错。设备发布数据并且不需要任何响应。必须处理来自每个设备的数据,但这不会花费很长时间,我们可以在 POST 调用期间执行此操作(尽管如果我们也可以在后台任务中执行此操作会很好:))。更高级的计算目前在夜间在后台任务中完成,但我们希望在达到条件后立即触发它们(例如正在收集特定数量的数据或将某些特定数据发送到服务器)。设备只需要发送数据并知道服务器是否收到(未处理)
标签: c# .net web-services model-view-controller iot