PHP 8.4.2 Released!

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, " ", $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