EventHttp::accept
EventHttp::accept
(PECL event >= 1.2.6-beta)
EventHttp :: accept - 使 HTTP 服务器接受指定套接字流或资源上的连接
描述
public bool EventHttp::accept ( mixed $socket )
使 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 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 服务器
← EventHttp
EventHttp::addServerAlias →