Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何智能地允许sinatra轮询数据_Ruby_Sinatra_Daemon_Raspberry Pi2_Daemons - Fatal编程技术网

Ruby 如何智能地允许sinatra轮询数据

Ruby 如何智能地允许sinatra轮询数据,ruby,sinatra,daemon,raspberry-pi2,daemons,Ruby,Sinatra,Daemon,Raspberry Pi2,Daemons,我想设计一个应用程序,其中后端不断轮询不同的传感器,而前端(sinatra)允许通过json api或简单地以html显示结果来查看这些数据 开发这样一个应用程序应该考虑哪些因素?我应该如何构造应用程序以实现最佳的可扩展性和易维护性 我的第一个想法是简单地让sinatra在每次收到到适当端点的请求时轮询传感器,但这似乎会很快陷入停滞,尤其是看到一些传感器每几秒钟才更新一次 我的第二个想法是让后台进程(或线程)轮询传感器并存储sinatra的值。当收到请求时,sinatra可以简单地轮询后台进程以

我想设计一个应用程序,其中后端不断轮询不同的传感器,而前端(sinatra)允许通过json api或简单地以html显示结果来查看这些数据

开发这样一个应用程序应该考虑哪些因素?我应该如何构造应用程序以实现最佳的可扩展性和易维护性

我的第一个想法是简单地让sinatra在每次收到到适当端点的请求时轮询传感器,但这似乎会很快陷入停滞,尤其是看到一些传感器每几秒钟才更新一次

我的第二个想法是让后台进程(或线程)轮询传感器并存储sinatra的值。当收到请求时,sinatra可以简单地轮询后台进程以获取缓存值(或从线程代码中提取缓存值),并将其呈现给客户端

我更喜欢第二种想法,但我不确定如何开发“后台应用程序”,以便sinatra可以对其进行轮询,以便向客户提供数据。另一个选项是sinatra对传感器轮询代码执行线程,这样它就可以在同一个进程内简单地从中获取值,而不是从另一个进程请求


需要注意的是,该应用程序还将负责不同继电器的自动化,此类继电器基于传感器,sinatra仅负责将传感器的状态中继给用户。我认为将后台进程/守护进程中的后端(自动化+传感器信息)与前端(sinatra)分离是理想的,但我不确定如何为sinatra获取数据


有人对我如何构建这个有什么意见吗?如果可能的话,我也希望能有一个简单的示例应用程序来显示我可以采纳和修改的想法

谢谢

编辑::

经过进一步研究,我发现了
drb
(分布式ruby),它允许您通过网络对对象进行远程调用。这可能是解决此问题的合适解决方案,因为守护进程可以自动执行中继、读取传感器并将值存储在类对象中,然后通过drb呈现类对象,以便sinatra可以调用远程对象上的getter以从守护进程获取最新数据。这就是我最初想要尝试做的


你们觉得怎么样?对于这样的应用程序,这是明智的吗?

我决定使用Sinatra、DRB和守护进程来满足我上面提到的要求

web前端将在其自己的流程中运行,并且仅通过与后端的DRB交互提供统计信息。这将允许客户端快速响应,并允许我将前端代码与后端代码分开

后端将在自己的进程中运行,并不断轮询传感器以获取更新,并使用getter将其存储为类对象,以便Sinatra可以在需要时通过DRB获取信息。它还将使用收集的信息实现特定于项目的自动化

最后,后端和前端将使用守护程序包装器进行包装,这样项目将具有启动、重新启动、停止、运行状态以及在守护程序因任何原因崩溃或退出时自动重新启动守护程序的功能

资料来源:


您应该使用WebSocket进行双向通信。这将完全消除投票的必要性。我推荐@maxple,我找到了
DRB
并编辑了部分问题。你认为DRB适合与sinatra一起使用吗?理想情况下,我正在寻找一种从远程进程轻松获取数据的方法,以便在另一个进程中运行的sinatra可以将数据呈现给客户端。我不知道DRB,所以我不知道。但您也可以使用WebSocket进行服务器通信(如果您可以在传感器机器上运行webapp)