Наличие нескольких асинхронных функций на http-сервере с поддержкой веб-сокетов с помощью swoole - PullRequest
0 голосов
/ 17 июня 2019

Я программирую свою очередь заданий с помощью swoole, и мне интересно, как у меня может быть несколько функций для моего http-сервера, которые являются асинхронными и поддерживают веб-сокеты. Пока это примеры того, что я хочу:

<?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(), а также должен поддерживать веб-сокеты и должен быть асинхронным.

У меня пока что это

$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 под разными именами функций. Как я могу также сделать функции асинхронными?.

...