红宝石轨道上,流单控制台输出到多个客户端
问题描述:
我一直在使用actionController :: live和流linux的控制台应用程序到我的webclient。红宝石轨道上,流单控制台输出到多个客户端
我试图建立自己的无线路由器界面显示的东西像WiFi信号,下载速度和配合wpa_supplicant
我使用你会发现在ActionController的文档中的基本的例子一些认证: :live和一点jquery更新客户端的div。
从我的控制器我可以做这样的事情来模拟一个wifi信号stregth progressbar。
Loop do
Response.stream.write(File.read('/proc/net/wireless'))
End
随着一点点的数学可以很容易地显示在进度条的形式的WiFi强度的实时流......
所以,没有太大的问题,在这里,直到我运行系统命令。
stream.write(`ping googleDOTcom`.each_line{|line| p line+'<br>') }
如果多个Web客户端查看该流时,控制器将启动多个进程......
2个问题我想讨论的选项或解决方案......我怎么会开始喜欢ping GOOGLE
一个应用程序,并有多个Web客户端查看相同的流。另外我怎样才能做到这一点只开始ping GOOGLE
你的意见是非常感谢。
答
我建议,而不是这是一个控制器操作,你把它变成一个模型动作。然后获取结果并尝试将它们作为属性保存在数据库中。
您可以概括一下检查,以允许用户指定要ping的最终主机。然后你应该看看活跃的工作。我会安排一个定期的间隔工作,根据模型ID实例化一个检查并将结果保存到数据库中。用户只是查看这些计划检查的结果。
它肯定会减少你的服务器正在做的工作,并且会阻止某人利用长时间运行的命令来破坏你的服务。
昨天晚上我用sqlite处理了一些示例。我创建了一个ping表(pid,TEXT)。然后在客户端从ping选择*,可以执行检查,如果该过程已经存在并显示文本或应用程序的每一行。你建议模型行动?也许你可能有一个小例子?在我看来,我只能拿出黑客解决方案。 – BiGMaC
我会创建一个名为类似ping_check的模型,可能还有属性:'remote','count','results'。然后模型可以有:'def执行#write execute here end'。然后,活动作业将执行ping_check实例并执行'ping_check_instance.execute',并将结果保存回模型。 – ddubs