通过多用户网页重复执行linux程序而不会崩溃


executing linux programs repeatedly through multi-user webpages without crashing

我正在进行一个硬件项目,该项目(目前)使用Beaglebone Black(最终将使用自定义硬件),并试图在其web服务器上设置一个网页,以循环方式返回所有四个LED的状态。我希望这个网页能够被多个人同时访问。

我让网页实时更新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]);
?>

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

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

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

提前谢谢。在此期间,我将继续搜寻。


编辑:(回复评论)

我想看看是否有一种标准的方法,或者至少是一种最佳实践。最终产品将允许用户更改硬件上的设置,强制硬件向其他硬件发送信息,读取硬件和其他连接到beaglebone black的硬件的信息。它最终会变得非常广泛,所以我真正需要的是一个资源(也许是一本书),在那里我可以阅读到这类事情通常是如何完成的。

整个过程最终将包括PWM、GPIO、ADC等。

至于访问led的方法,我知道"exec-cat"并不是获取这些信息的最佳方式。

从那以后,我改变了整个设置,所以现在,当beaglebone black启动时,它加载一个循环运行的c++程序,并写入包含硬件信息的文件。

然后,最初运行"exec-cat"的网页调用现在只是将程序的输出文件加载到浏览器中。这解决了崩溃问题,但感觉不是做这个项目的正确方法,因为会有大量文件中包含ADC值、PWM值等信息。为了进一步复杂化,文件访问确实需要一个互斥体来防止c++程序在web程序读取文件时写入文件,以及一个互斥锁,以防止web程序在当前正在编写文件时读取该文件。这将使每个进程产生3个文件。

一种方法可以是构建一个shell脚本,该脚本设置具有led状态的局部变量。然后,您将这个脚本作为cron作业(每隔10ms或您想要的任何时间启动一次)。

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