Глава 3 не нужно корректировать этот путь.
При запуске скрипт Quicki входит в цикл ожидания и прослушивает браузер.
запросы на "HTTP-порт". Запросы, соответствующие допустимым критериям, вызывают указанный
скрипты модулей. Ответом по умолчанию на любой запрос клиента является вызов функции просмотра.
действие; другими словами, вики. компьютерная графика
226
ПРОВЕРЕННЫЕ КОМПОНЕНТЫ WIKI
#1 /usr/bin/perl
# Copyright (c) 1994, 1996, 1999 c2.com, Все права защищены.
# @INC = ('\Perl\Lib', '.');
($порт) = @ARGV;
$port = 80, если только $port;
Это означает, что при указании в браузере только «localhost» по умолчанию используется порт 80.
но что другие номера портов могут быть указаны, чтобы позволить нескольким экземплярам быть
доступ одновременно.
$| = 1;
print "работает на порту $port\n";
$WN0HANG = 1 ;
# требуется "sys/wait.h"
$AF__INET = 2;
$ S0CK_STREAM = 1 ;
$sockaddr = 'S η a4 x8';
($name, $aliases, $proto) = getprotobyname('tcp');
$this = pack($sockaddr, $AF_INET, $port, "\0\0\0\0");
выбрать (НС); $| = 1;
сокет(S, $AF_INET, $SOCK_STREAM, $proto) || die "сокет: $!";
привязать(S,$это) || die "связать: $!";
слушать(S,5) || die "подключить: $!";
выбрать (С); $| = 1; выбрать (НС);
Все это может показаться очень загадочным, если только читатель не знаком с "socket
программирования". Краткое объяснение состоит в том, что код устанавливает сеть
подключение для обработки запросов браузера.
for($con = 1 ; ; $con++) {
($адрес = принять(NS,S)) || die "принять: $!";
^сервис();
}
В этот момент сервер находится в цикле бездействия, пока не получит запрос на то, что он может
услуга. Любые ошибки приводят к завершению подпрограммы (и, в конечном счете, к завершению процесса Perl).
прекращать). Процедура обслуживания должна проанализировать запрос, чтобы определить, что делать:
для QuickiWiki, какой модуль вызывать.
вспомогательная служба {
($af,$port,$inetaddr) = unpack($sockaddr,$addr);
@inetaddr = распаковать('C4',$inetaddr);
$inetaddr = присоединиться('.', @inetaddr);
РАЗБИРАЕМ QUICKIWIKI
227
локальный (%head/%body, $query);
$запрос = <NS>;
($method, $file, $protocol) = $reguest =~ / Λ (\S*) \/(\S*) (\S*)/;
% голова = () ;
в то время как (<NS>) {
с/\r|\n//г;
последний, если только /\S/;
$head{" \L$1"} =$2, если / A (\S*): (.*)/;
}
$file =~ s/\%(..)/pack(C, hex($1))/geo;
print STDOUT "$con: $inetaddr $method $file\n";
Эта последняя подпрограмма предоставляет журнал регистрации (в окне DOS) обслуживаемых запросов.
Обычно это длинная последовательность элементов GET со случайным POST, когда
страницы редактируются. Это может быть полезно для отладки или проверки того, что Quicki
сервер работает.
($file, $query) = ($', $'), если $file =~ /\?/;
$file = "wiki.cgi", если только $file;