I am programming my jobs queue with swoole and i wonder how i can have multiple functions for my http server that are async and support web sockets. So far this are the examples of what i want:
<?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
";
});
$http->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World
");
});
$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}
";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}
";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}
";
});
$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]
";
});
$server->on('task', function ($server, $task_id, $from_id, $data) {
echo "New AsyncTask[id=$task_id]
";
$server->finish("$data -> OK");
});
$server->on('finish', function ($server, $task_id, $data) {
echo "AsyncTask[$task_id] finished: {$data}
";
});
$server->start();
In the http server, i want to have a method i can use as a hook for my api i.e my_func()
and also should support web sockets and should be async.
I have so far this
$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);
});
How can i have the http server severe multiple functions like on('funcc_1').., on('funcc_2').. so that i can have various api methods under different function names. How can i also make the functions async?.