EventHttp::accept

(PECL event >= 1.2.6-beta)

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

Описание

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

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

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

Замечание:

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

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

socket

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

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

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Примеры

Пример #1 Пример работы метода EventHttp::accept()

<?php

$base
= new EventBase();
$http = new EventHttp($base);

$addresses = [
8091 => "127.0.0.1",
8092 => "127.0.0.2",
];
$i = 0;

$socket = array();

foreach (
$addresses as $port => $ip) {
echo
$ip, " ", $port, PHP_EOL;
$socket[$i] = socket_create(AF_INET, SOCK_STREAM, SOL_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($base, SIGINT, 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-сервер к указанному адресу и порту
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top