2014-09-12 13 views
0

我正在研究一个当前使用Beaglebone Black(最终将使用定制硬件)的硬件项目,并且正在尝试在其Web上设置一个网页服务器,以循环方式返回所有四个LED的状态。我希望这个网页能够被多个人同时访问。通过多用户网页反复执行linux程序而不会崩溃

我已经在网页上更新了LED的实时值,但问题是,如果网页的两个实例都打开,它们开始表现怪异并最终崩溃。

该网页使用jQuery定时器,每10ms执行一次。

<script> 
     var Timer=setInterval(function(){GetLed()}, 10); 

     function GetLed() 
     { 
      $("#div1").load("getled3.php"); 

     } 
</script> 

getled3.php使用PHP执行4个的Linux命令(但这些最终可能是C++的未来计划,我们扩大了网页的能力),并打印出结果:

<?php 

exec("cat /sys/class/leds/beaglebone:green:usr0/brightness", $Led0); 
exec("cat /sys/class/leds/beaglebone:green:usr1/brightness", $Led1); 
exec("cat /sys/class/leds/beaglebone:green:usr2/brightness", $Led2); 
exec("cat /sys/class/leds/beaglebone:green:usr3/brightness", $Led3); 

print($Led0[0] . ", " . $Led1[0] . ", " . $Led2[0] . ", " . $Led3[0]); 

?> 

我愿意自己研究如何创建一个可以和多个用户很好地玩的Web应用程序,但到目前为止,我的搜索没有找到任何有用的结果,这可能只是我的措辞。

如果任何人都可以发布一些指向正确方向的链接来创建控制硬件的Web应用程序,那将是最有帮助的,因为最终的实现将非常复杂,并且可能包括运行“主”应用程序在一个循环中,网页为用户提供了更改硬件设置的能力。

我想我们正在做的事情的最好的例子是动态路由器设置页面。

在此先感谢。我将在此期间继续搜索。


编辑:(与回应评论)

我一直在寻找,看看是否有这样做的标准方法,或至少是最佳做法。最终产品最终将允许用户更改硬件上的设置,强制硬件将信息发送到其他硬件,读取有关Beaglebone黑色附件的硬件和其他硬件的信息。它最终会变得非常广泛,所以我真正需要的是一种资源(也许是一本书),我可以在这里了解这种事情通常是如何完成的。

整个事情最终将合并的PWM,个GPIO,模数转换器等

至于访问LED的方法,我明白了“EXEC猫”是无法得到这些信息的最佳途径。

我已经改变了整个设置,所以现在,当beaglebone黑色启动时,它会加载一个循环运行的C++程序,并用硬件信息写入文件。

然后,最初运行“exec cat”的网页调用现在只是将程序的输出文件加载到浏览器中。这解决了崩溃问题,但只是觉得不像做这个项目的正确方法,因为会有大量的文件包含关于ADC值,PWM值等的信息。为了进一步解决问题,文件访问实际上需要一个互斥体来防止C++程序在Web程序读取时写入文件,以及一个互斥体,以防止Web程序在正在编写它时正在读取文件。每个进程会产生3个文件。

+0

我不想成为smartass,但你应该专业地做我的公司使用Nagios。 Nagios在服务器上检查了很多东西,甚至可以在cli和nagios中编写自己的sh,python和php,并经常触发它,它可以将结果发送给您。 – 2014-09-12 14:25:39

+0

为什么'exec''猫'?所有这些都是打印出文件的内容。您可以轻松使用'file_get_contents()'而不必启动shell + cat – 2014-09-12 14:31:54

+0

您是否验证过这不仅仅是对同一个LED进行并发访问的问题? – molbdnilo 2014-09-12 14:31:55

回答

0

一种方法可以是构建一个shell脚本,该脚本使用leds状态设置局部变量。然后你把这个脚本作为cron作业(每10ms启动一次,或者任何你想要的)。

之后您只需要获取局部变量的值。