2014-09-12 2 views
0

Я работаю над аппаратным проектом, который (в настоящее время) использует 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 файла на процесс.

+0

Я не хочу быть умным, но вы должны делать это профессионально, моя компания использует Nagios. Nagios проверяет много вещей на серверах или даже вы можете написать свой собственный sh, python, php в cli и nagios, часто запускаете его, и он может отправить вам результат. –

+0

Почему 'exec'' cat'? Все, что делает, это распечатать содержимое файла. Вы также можете легко использовать 'file_get_contents()' без необходимости запуска оболочки + cat –

+0

Вы проверили, что это не просто проблема с одновременным доступом к тому же светодиоду? – molbdnilo

ответ

0

Может быть создан сценарий оболочки, который устанавливает локальную переменную со состояниями светодиодов. Затем вы ставите этот скрипт как задание cron (которое запускается каждые 10 мс или что угодно).

После того, как вам нужно получить значение локальной переменной.

Смежные вопросы