首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EventHttp::accept

(PECL event >= 1.2.6-beta)

EventHttp :: accept - 使 HTTP 服务器接受指定套接字流或资源上的连接

描述

代码语言:javascript
复制
public bool EventHttp::accept (  mixed $socket  )

使 HTTP 服务器接受指定套接字流或资源上的连接。套接字应该准备好接受连接。

可以多次调用以接受不同套接字上的连接。

注意:要绑定一个套接字,在一次调用中监听接受套接字上的连接,请使用 EventHttp :: bind()。仅当已经有套接字准备好接受连接时,才需要 EventHttp :: accept()

参数

socket

套接字资源,流或数字文件描述符,表示准备好接受连接的套接字。

返回值

TRUE成功返回。否则FALSE

例子

示例#1 EventHttp :: accept()示例

代码语言:javascript
复制
<?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.
?>

上面的例子会输出类似于:

代码语言:javascript
复制
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 →

扫码关注腾讯云开发者

领取腾讯云代金券