在具有带套接字的Web套接字支持的http服务器上具有多个异步功能

时间:2019-06-17 07:51:24

标签: php swoole

我正在用swoole对作业队列进行编程,我想知道如何为HTTP服务器提供异步和支持Web套接字的多个功能。到目前为止,这是我想要的示例:

<?php
//http server
$http = new swoole_http_server("127.0.0.1", 9501);

$http->on("start", function ($server) {
    echo "Swoole http server is started at http://127.0.0.1:9501\n";
});

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World\n");
});

$http->start();



//web sockets
<?php
$server = new swoole_websocket_server("127.0.0.1", 9502);

$server->on('open', function($server, $req) {
    echo "connection open: {$req->fd}\n";
});

$server->on('message', function($server, $frame) {
    echo "received message: {$frame->data}\n";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});

$server->on('close', function($server, $fd) {
    echo "connection close: {$fd}\n";
});

$server->start();

//async server

<?php
$server = new swoole_server("127.0.0.1", 9502);
$server->set(array('task_worker_num' => 4));
$server->on('receive', function($server, $fd, $from_id, $data) {
    $task_id = $server->task("Async");
    echo "Dispath AsyncTask: [id=$task_id]\n";
});
$server->on('task', function ($server, $task_id, $from_id, $data) {
    echo "New AsyncTask[id=$task_id]\n";
    $server->finish("$data -> OK");
});
$server->on('finish', function ($server, $task_id, $data) {
    echo "AsyncTask[$task_id] finished: {$data}\n";
});
$server->start();

在http服务器中,我希望有一种方法可以用作我的api的钩子,即my_func(),还应该支持Web套接字并且应该是异步的。

我到目前为止有这个

$server = new Swoole\WebSocket\Server('127.0.0.1', 9501, SWOOLE_BASE);
$server->set(['open_http2_protocol' => true]);
// http && http2
$server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    $response->end('Hello ' . $request->rawcontent());
});
// websocket
$server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) {
    $server->push($frame->fd, 'Hello ' . $frame->data);
});

我如何才能使http服务器具有严重的多个功能,例如on('funcc_1')..,on('funcc_2')..,以便我可以使用不同的函数名使用各种api方法。我还如何使这些功能异步?。

0 个答案:

没有答案