2024 年日本 PHP 研討會

EventHttp::accept

(PECL event >= 1.2.6-beta)

EventHttp::accept讓 HTTP 伺服器接受指定 socket 串流或資源上的連線

說明

public EventHttp::accept( 混合 $socket ): 布林值

讓 HTTP 伺服器在指定的 socket 串流或資源上接受連線。該 socket 應已準備好接受連線。

可以多次呼叫此函式,在不同的 socket 上接受連線。

注意事項:

若要單次呼叫中完成繫結 socket、`listen` 並 `accept` socket 上的連線,請使用 EventHttp::bind()。 只有在已經有一個準備好接受連線的 socket 時,才需要使用 EventHttp::accept()

參數

socket

表示已準備好接受連線的 socket 的 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 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

參見

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top