пятница, 8 января 2010 г.

Using AOLserver as a proxy server

В некоторых случаях удобно переадресовать или сгенерировать запрос к тому или иному бэкенду, нежели обрабатывать его средствами AOL Server. Отправка запроса реализуется достаточно легко с помощью встроенной функции ns_httpopen:
Using AOLserver as a proxy server

set conn [ns_httpopen GET $some_arbitrary_URL {} 30]
set read_desc [lindex $conn 0]
set write_desc [lindex $conn 1]
set headers [lindex $conn 2]

set mime_type [ns_set get $headers content-type]

set head "HTTP/1.0 200 OK
MIME-Version: 1.0
Content-Type: $mime_type\r\n\r\n"
# Plus any more headers you need.

ns_write $head
ns_startcontent -type $mime_type
ns_writefp $read_desc


Для перенаправления запроса потребуется лишь скопировать все или некоторые хидеры исходного запроса (в примере выше хидеры не передаются). Таким образом, возможно, к примеру, выполнение авторизации в аоле и обработка запроса бэкенд-сервером.

См. также реализацию http-клиента для аола на основе cURL: Topic: AOLserver -- HTTP client.

Бэкендом может быть любая консольная утилита, доступ к которой обеспечивается с помощью tcpserver из комплекта ucspi-tcp. В том числе интересен fnord - веб-сервер, представляющий собой очень компактную программу (16 kB), вызываемую через tcpserver.


$ tcpserver -RHl localhost 0 33333 /usr/sbin/fnord-idx .

$ ls -lh test.js
-rw-r--r-- 1 veter veter 2.1K 2009-05-14 16:20 test.js

$ openload localhost:33333/test.js
URL: http://localhost:33333/test.js
Clients: 5
MaTps 7110.00, Tps 7110.00, Resp Time 0.001, Err 0%, Count 7110
MaTps 7099.80, Tps 7008.00, Resp Time 0.001, Err 0%, Count 14118
MaTps 7083.82, Tps 6940.00, Resp Time 0.001, Err 0%, Count 21058
MaTps 7072.34, Tps 6969.00, Resp Time 0.001, Err 0%, Count 28027
MaTps 7060.90, Tps 6958.00, Resp Time 0.001, Err 0%, Count 34985
MaTps 7068.81, Tps 7140.00, Resp Time 0.001, Err 0%, Count 42125
MaTps 7079.33, Tps 7174.00, Resp Time 0.001, Err 0%, Count 49299
MaTps 7071.70, Tps 7003.00, Resp Time 0.001, Err 0%, Count 56302
MaTps 7080.63, Tps 7161.00, Resp Time 0.001, Err 0%, Count 63463
MaTps 7075.27, Tps 7027.00, Resp Time 0.001, Err 0%, Count 70490

Total TPS: 6869.03
Avg. Response time: 0.001 sec.
Max Response time: 0.029 sec
Total Requests: 70490
Total Errors: 0

$ time echo -e "GET /test.js HTTP/1.1\r\n"|/usr/sbin/fnord-idx . >/dev/null
0.0.0.0 - - [08/Jan/2010:00:51:24 -0300] "GET /test.js/test.js HTTP/1.1" 200 2054

real 0m0.001s
user 0m0.000s
sys 0m0.004s

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru