2015-09-13 2 views
-1

У меня есть сценарий, который многократно обрабатывает X-запросы каждые Y минут на один и тот же сервер и в настоящее время не использует конвейерную обработку/HTTP Keep-Alive, частично потому, что каждому запросу предшествуют по заголовку на выходе.Оберните петлю, чтобы использовать HTTP-конвейерную обработку

#!/bin/sh -x 
for k in $(jot 6) 
    do 
    while read i 
     do 
     echo -n $i 
     curl -s "http://example.org/?param=$i" | fgrep result 
    done <<EOF 
some 
uri 
data 
here 
EOF 
    sleep 600 
done 

То, что я хочу, чтобы преобразовать это использовать одно подключение к example.com для каждой партии, вместо того, чтобы установить новый для каждого запроса.

Обратите внимание, что конвейерная обработка осложняется тем фактом, что заголовок должен быть напечатан, например. echo -n $i.

Ограничение: может быть ноль или один линия от каждого запроса, который будет соответствовать строке, которую мы пытаемся fgrep (так, настоящий сценарий также частично нарушен, так как он не будет печатать \n если также являются 0 линиями).

Я идеально ищу решение sh, но у меня есть perl и python2.7, если это не займет слишком много времени. (Так же, как и curlwget, а также все другие вещи, которые OpenBSD есть.)

ответ

1

Чисто оболочка на основе решения, вероятно, не работать, так как вы должны использовать тот же соединение TCP при выполнении поддержания активности/конвейерная. Но ваши текущие решения не полностью основаны на оболочках, поскольку они постоянно вызывают завихрение и fgrep, и если это ваше понимание оболочки-решения, чем ваша оболочка также может вызвать Perl и Python.

Я рекомендую просто использовать библиотеки LWP (Perl) или запросов (Python), которые используют HTTP keep-alive. Существует достаточно примеров того, как использовать эти библиотеки, поэтому здесь нет необходимости повторять его. Помимо этого поведение может отличаться в разных версиях (например, если HTTP-keep-alive включен по умолчанию или нет, и неизвестно, какие версии установлены на неизвестной версии OpenBSD). HTTP-конвейерная обработка сложнее, но в большинстве случаев не ускоряется, а сохраняется в большинстве случаев (возможно, для действительно небольших запросов). Также обратите внимание, что keep-alive не волшебным образом ускоряет все, так как он также должен поддерживаться на стороне сервера. В то время как большинство серверов реализуют его, иногда он отключается, чтобы использовать меньше ресурсов.

+0

hm, я предполагаю, что я просто имел в виду постоянное сохранение жизни, а не конвейерную обработку. – cnst

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