2013-09-19 2 views
1

У меня есть сценарий, который запускается в терминале, который каждые 2 секунды опросает сервер для 0 или 1 из PHP-скрипта, а затем выполняет команду на основе результата.Связь с терминалом Linux с сервером

Важное примечание: оно работает на малиновом пи.

Итак, мой вопрос: есть ли лучший способ связаться с сервером? Что было бы идеальным, это что-то вроде типа socket.io или html5 для подключения к Интернету, но они не могут быть выполнены с терминала.

Вот что у меня есть, так что вы получите суть

while : 
do 

gpio mode 0 out 
gpio mode 7 out 

var1=$(curl http://url.com/index.php) 
L1=$(echo $var1 | cut -c1-1) 
L7=$(echo $var1 | cut -c7-7) 
if [ $L1 == 0 ]; then 
gpio write 0 0 
elif [ $L1 == 1 ]; then 
gpio write 0 1 
fi 

if [ $L7 == 0 ]; then 
gpio write 7 0 
elif [ $L7 == 1 ]; then 
gpio write 7 1 
fi 

gpio readall 
sleep 2 

done 

EDIT: мне нужно запустить около 1000 Raspberry Pi единиц, используя это на том же сервере, и я просто ищет наиболее эффективный метод.

+1

Как бы вы определили «лучше»? Какие критерии вы имеете в виду? –

+1

Почему вам не нравится ваше решение? Если вам нужны такие вещи, как постоянные соединения или что-то подобное, я бы предложил использовать более мощный язык. (Например, Python). PS: укажите тег для используемого вами языка: [sh] или [bash] – Scolytus

+1

«завиток», вероятно, является лучшим решением для этого. Вы можете использовать 'netcat', но тогда вам придется реализовать весь протокол HTTP самостоятельно, и' curl' позаботится об этом для вас. Насколько проще это получить, чем то, что вы написали? – Barmar

ответ

1

Существует много способов сделать это. HTTP не подходит для этого протоколла (поскольку он не поддерживает сеансы), но поскольку вы уже используете его. Давайте посмотрим на решение для HTTP.

Вместо опроса (который является дорогостоящим, но простым в реализации) вы можете передавать данные с сервера клиентам.

Для этого с помощью HTTP используйте COMET, который является зонтичным термином для нескольких различных методов для этого. См http://en.wikipedia.org/wiki/Comet_%28programming%29

Выполнение этого с Nginx вам нужен дополнительный модуль, например: https://github.com/wandenberg/nginx-push-stream-module

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