我想设计一个应用程序,其中后端不断轮询不同的传感器,而前端(sinatra)允许通过 json api 或简单地在 html 中显示结果来查看这些数据。
在开发这样的应用程序时我应该考虑哪些因素,以及我应该如何构建应用程序以实现最佳扩展和易于维护。
我的第一个想法是让 sinatra 每次收到对正确端点的请求时都轮询传感器,但这似乎会很快陷入安静,尤其是看到某些传感器如何每隔几秒钟才更新一次。
我的第二个想法是让后台进程(或线程)轮询传感器并存储 sinatra 的值。当收到请求时,sinatra 可以简单地轮询后台进程以获取缓存值(或从线程代码中提取)并将其呈现给客户端。
我更喜欢第二个想法,但我不确定如何开发“后台应用程序”,以便 sinatra 可以轮询它以获取数据以呈现给客户端。另一种选择是让 sinatra 线程化传感器轮询代码,以便它可以在同一进程内简单地从其中获取值,而不是从另一个进程请求它。
请注意,此应用程序还将负责不同继电器的自动化,并且基于传感器,sinatra 仅负责将传感器的状态传递给用户。我认为将后台进程/守护程序中的后端(自动化+传感器信息)与前端(sinatra)分开是理想的,但我不确定如何获取 sinatra 的数据。
有人对我如何构建这个有任何意见吗?如果可能的话,我还希望有一个示例应用程序,它简单地显示了我可以采用和修改的想法。
谢谢
编辑::
经过更多研究后,我发现drb
(分布式 ruby http://ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/DRb.html)允许您通过网络对对象进行远程调用。这可能是这个问题的合适解决方案,因为守护进程可以自动化中继,读取传感器并将值存储在类对象中,然后通过 drb 呈现类对象,以便 sinatra 可以调用远程对象上的 getter 来获取来自守护进程的日期数据。这是我最初想要尝试做的。
你们有什么感想?对于这样的应用程序是否可取?