我正在研究一个当前使用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个文件。
我不想成为smartass,但你应该专业地做我的公司使用Nagios。 Nagios在服务器上检查了很多东西,甚至可以在cli和nagios中编写自己的sh,python和php,并经常触发它,它可以将结果发送给您。 – 2014-09-12 14:25:39
为什么'exec''猫'?所有这些都是打印出文件的内容。您可以轻松使用'file_get_contents()'而不必启动shell + cat – 2014-09-12 14:31:54
您是否验证过这不仅仅是对同一个LED进行并发访问的问题? – molbdnilo 2014-09-12 14:31:55