Глава 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;