EventHttp::accept

(PECL event >= 1.2.6-beta)

EventHttp::acceptЗаставляет HTTP-сервер принимать соединения с указанным потоком сокета или ресурсом

Описание

public EventHttp::accept ( mixed $socket ) : bool

Заставляет HTTP-сервер принимать соединения с указанным потоком сокета или ресурсом. Сокет должен быть готов к приему соединений.

Может вызываться несколько раз, чтобы принимать соединения на разных сокетах.

Замечание:

Чтобы связать сокет, прослушать и принять соединения на сокете в одном вызове, используйте EventHttp::bind(). EventHttp::accept() требуется только в том случае, если у одного вызова уже есть сокет, готовый для принятия соединений.

Список параметров

socket

Ресурс сокета, потоковый или числовой дескриптор файла, представляющий сокет, готовый принимать соединения.

Возвращаемые значения

Возвращает true в случае успешного выполнения, false в противном случае.

Примеры

Пример #1 Пример использования EventHttp::accept()

<?php
$base 
= new EventBase();
$http = new EventHttp($base);

$addresses = array (
     
8091 => "127.0.0.1",
     
8092 => "127.0.0.2",
);
$i 0;

$socket = array();

foreach (
$addresses as $port => $ip) {
    echo 
$ip" "$portPHP_EOL;
    
$socket[$i] = socket_create(AF_INETSOCK_STREAMSOL_TCP);
    if (!
socket_bind($socket[$i], $ip$port)) {
        exit(
"ошибка socket_bind\n");
    }
    
socket_listen($socket[$i], 0);
    
socket_set_nonblock($socket[$i]);

    if (!
$http->accept($socket[$i])) {
        echo 
"Принять не удалось\n";
        exit(
1);
    }

    ++
$i;
}

$http->setCallback("/some-page", function() {
 echo 
"(some-page)\n";
    echo 
"URI: "$req->getUri(), PHP_EOL;
    
$req->sendReply(200"OK");
    echo 
"OK\n";
});

$http->setDefaultCallback(function($req) {
    echo 
"URI: "$req->getUri(), PHP_EOL;
    
$req->sendReply(200"OK");
    echo 
"OK\n";
});

$signal Event::signal($baseSIGINT, function () use ($base) {
    echo 
"Пойман SIGINT. Останавливаем...\n";
    
$base->stop();
});
$signal->add();

$base->dispatch();
echo 
"конец\n";
// Мы не закрывали сокеты, так как Libevent 
// уже установил флаги CLOSE_ON_FREE и CLOSE_ON_EXEC 
// в дескрипторе файла, связанном с сокетами.
?>

Результатом выполнения данного примера будет что-то подобное:

Client:
$ nc 127.0.0.1 8091
GET /about HTTP/1.0
Connection: close

HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close

Server:
127.0.0.1 8091
127.0.0.2 8092
URI: /about
OK

Смотрите также

  • EventHttp::bind() - Привязывает HTTP-сервер к указанному адресу и порту