Event 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를 반환합니다.


Examples

예제 #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 failed\n");
    }
    socket_listen($socket[$i], 0);
    socket_set_nonblock($socket[$i]);

    if (!$http->accept($socket[$i])) {
        echo "Accept failed\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 "Caught SIGINT. Stopping...\n";
    $base->stop();
});
$signal->add();

$base->dispatch();
echo "END\n";
// We didn't close sockets, since Libevent already sets
// CLOSE_ON_FREE and CLOSE_ON_EXEC flags on the file
// descriptor associated with the sockets.
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

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 서버를 바인딩합니다.