Я работаю над аппаратным проектом, который (в настоящее время) использует Beaglebone Black (в конечном итоге будет использоваться специальное оборудование), и я пытаюсь настроить веб-страницу на своей веб-странице сервер, который возвращает состояние всех четырех светодиодов, в реальном времени, в цикле. И я хочу, чтобы эта веб-страница могла быть доступна нескольким людям одновременно.Выполнение программ linux неоднократно через многопользовательские веб-страницы без сбоев
У меня есть веб-страница, обновляющая значения светодиодов в прямом эфире, но проблема в том, что если два экземпляра веб-страницы открыты, они начинают вести себя странно и в конечном итоге сбой.
На веб-странице используется таймер jquery, который выполняется каждые 10 мс.
<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]);
?>
Я готов самостоятельно исследовать, как создать веб-приложение, которое прекрасно сочетается с несколькими пользователями, но до сих пор мои поисковые запросы не принесли никаких полезных результатов, что может быть только моей формулировкой.
Если бы кто-нибудь мог просто опубликовать некоторые ссылки, которые указывали бы мне в правильном направлении для создания веб-приложения, которое контролирует аппаратное обеспечение, это было бы наиболее полезно, поскольку возможная реализация будет чрезвычайно сложной и может включать в себя аппаратное обеспечение, «ведущее» приложение в цикле, с веб-страницей, предоставляющей пользователю возможность изменять настроенное оборудование.
Я думаю, что лучшим примером того, что мы делаем, будет страница с динамическим маршрутизатором.
Заранее спасибо. Я собираюсь продолжать поиск в то же время.
Edit: (с ответами на комментарии)
Я искал, чтобы выяснить, есть ли стандартный способ сделать это, или, по крайней мере, передовой практики. Конечный продукт в конечном итоге позволит пользователю изменить настройки на аппаратном обеспечении, заставить оборудование отправлять информацию на другое оборудование, читать информацию об оборудовании и другом оборудовании, прикрепленном к черному beaglebone. В конечном итоге это станет довольно обширным, и поэтому мне действительно нужен ресурс (возможно, книга), где я могу прочитать о том, как обычно это делается.
Все это в конечном итоге включать ШИЕ, GPIOs, АЦП и т.д.
Что касается способа доступа светодиодов, я понимаю «Exec кот» не самый лучший способ, чтобы получить эту информацию.
С тех пор я сменил всю настройку так, что теперь, когда черные ботинки с бисером загружаются, программа C++ запускается в цикле и записывает файлы с информацией об оборудовании.
Затем вызовы веб-страницы, которые изначально выполнялись «exec cat», теперь просто загружают выходной файл программы в браузер. Это решило проблему сбоя, но просто не похоже на правильный метод выполнения этого проекта, потому что в них будет много файлов с информацией о значении АЦП, значениях ШИМ и т. Д. Для дальнейшего свертывания вещей для доступа к файлам действительно потребуется мьютекс, чтобы программа C++ не писала файл во время чтения веб-программы, а мьютекс не позволял веб-программе читать файл, если в настоящее время программа C++ записывает его. Это составило бы 3 файла на процесс.
Я не хочу быть умным, но вы должны делать это профессионально, моя компания использует Nagios. Nagios проверяет много вещей на серверах или даже вы можете написать свой собственный sh, python, php в cli и nagios, часто запускаете его, и он может отправить вам результат. –
Почему 'exec'' cat'? Все, что делает, это распечатать содержимое файла. Вы также можете легко использовать 'file_get_contents()' без необходимости запуска оболочки + cat –
Вы проверили, что это не просто проблема с одновременным доступом к тому же светодиоду? – molbdnilo