PHP code example of sidalex / swoole-app
1. Go to this page and download the library: Download sidalex/swoole-app library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sidalex / swoole-app example snippets
declare(strict_types=1);
woole\Http\Response;
use Swoole\Http\Server;
use Swoole\Constant;
$config = json_decode(file_get_contents('./config.json'));
$http = new Server("0.0.0.0", 9501);
$http->set(
[
Constant::OPTION_WORKER_NUM => 2,
Constant::OPTION_TASK_WORKER_NUM => (swoole_cpu_num()) * 10,
]
);
$app = new \Sidalex\SwooleApp\Application($config);
$http->on(
"start",
function (Server $http) use ($app) {
echo "Swoole HTTP server is started.\n";
$app->initCyclicJobs($http);
}
);
$http->on(
"request",
function (Request $request, Response $response) use ($app,$http) {
$app->execute($request, $response,$http);
}
);
$http->on(
'task',
function (Server $server, $taskId, $reactorId, $data) use ($app) {
return $app->taskExecute($server, $taskId, $reactorId, $data);
}
);
$http->start();
$config = json_decode(file_get_contents('./config.json'));
$config = new stdClass();
$config->notFoundController = 'appNameSpaceMyApp\MyNotFoundController';
$config->controllers = [
'appNameSpaseMyApp\MyFirstControllerNamespace',
'appNameSpaseMyApp\MySecondControllerNamespace',
'appNameSpaseMyApp\MyThreeControllerNamespace',
];
$config->CyclicJobs =[
'appNameSpaseMyApp\MyFirstCyclicJobsClass',
'appNameSpaseMyApp\MySecondCyclicJobsClass',
'appNameSpaseMyApp\MyThreeCyclicJobsClass',
];
$http->on(
'task',
function (Server $server, $taskId, $reactorId, $data) use ($app) {
return $app->taskExecute($server, $taskId, $reactorId, $data);
}
);
Swoole\Server->task(Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface $data, int $dstWorkerId = -1, callable $finishCallback = null);
$result = Swoole\Server->taskwait((Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface $data, float $timeout = 0.5, int $dstWorkerId = -1) :TaskResulted
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
$taskResult = $this->server->taskwait($taskData);
var_export($taskResult->getResult());
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
/**
* @var $taskResult TaskResulted
*/
$taskResult = $this->server->taskwait($taskData);
var_export($taskResult->getResult());
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
/**
* @var $taskResult TaskResulted
*/
$taskResult = $this->server->taskwait($taskData);
var_export($taskResult->getResult());
$config = new stdClass();
$config->CyclicJobs =[
"Sidalex\TestSwoole\CyclicJobs\TestCyclicJobs",
];
{
"CyclicJobs": [
"Sidalex\\TestSwoole\\CyclicJobs\\TestCyclicJobs"
]
}
class MyCyclicJob implements CyclicJobsInterface
{
private $application;
private $server;
public function __construct(Application $application, Server $server)
{
$this->application = $application;
$this->server = $server;
}
public function getTimeSleepSecond(): float
{
// Returns the sleep time in seconds
return 5.0;
}
public function runJob(): void
{
$arr = [1,2,3,4,5,6,7,8,9];
foreach ($arr as $value){
if($value % 3 == 0)
{
echo "example";
}
}
}
}
#[\Sidalex\SwooleApp\Classes\Controllers\Route(uri: '/api/{v1}/get_resume',method:"POST")]
class TestController extends AbstractController
{
use Sidalex\SwooleApp\Classes\Controllers\Route;
#[Route(uri: '/api/{v1}/get_resume',method:"POST")]
class TestController extends AbstractController
{
$this->response->setHeader('Content-Type', 'application/json');
$this->response->end(
json_encode(
[
'status' => 'error',
'message' => 'collection '.$this->uri_params['collection_name'] . 'not found in collectionList',
]
)
);
class NotFoundController implements ControllerInterface
{
private \Swoole\Http\Request $request;
private \Swoole\Http\Response $responce;
/**
* @var array|string[]
*/
private array $uri_params;
public function __construct(\Swoole\Http\Request $request, \Swoole\Http\Response $response, array $uri_params=[])
{
$this->request = $request;
$this->responce = $response;
$this->uri_params = $uri_params;
}
public function execute(): \Swoole\Http\Response
{
$this->responce->setStatusCode(404);
$this->responce->setHeader('Content-Type', 'application/json');
$this->responce->end(json_encode(
[
'codeStatus' => '404',
'text' => 'Page not found'
]
));
return $this->responce;
}
public function setApplication(Application $application, Server $server)
{
}
}
declare(strict_types=1);
woole\Http\Response;
use Swoole\Http\Server;
use Swoole\Constant;
$config = json_decode(file_get_contents('./config.json'));
$http = new Server("0.0.0.0", 9501);
$http->set(
[
Constant::OPTION_WORKER_NUM => 2,
Constant::OPTION_TASK_WORKER_NUM => (swoole_cpu_num()) * 10,
]
);
$app = new \Sidalex\SwooleApp\Application($config);
$http->on(
"start",
function (Server $http) use ($app) {
echo "Swoole HTTP server is started.\n";
$app->initCyclicJobs($http);
}
);
$http->on(
"request",
function (Request $request, Response $response) use ($app,$http) {
$app->execute($request, $response,$http);
}
);
$http->on(
'task',
function (Server $server, $taskId, $reactorId, $data) use ($app) {
return $app->taskExecute($server, $taskId, $reactorId, $data);
}
);
$http->start();
$config = json_decode(file_get_contents('./config.json'));
$config = new stdClass();
$config->notFoundController = 'appNameSpaceMyApp\MyNotFoundController';
$config->controllers = [
'appNameSpaseMyApp\MyFirstControllerNamespace',
'appNameSpaseMyApp\MySecondControllerNamespace',
'appNameSpaseMyApp\MyThreeControllerNamespace',
];
$config->CyclicJobs =[
'appNameSpaseMyApp\MyFirstCyclicJobsClass',
'appNameSpaseMyApp\MySecondCyclicJobsClass',
'appNameSpaseMyApp\MyThreeCyclicJobsClass',
];
$http->on(
'task',
function (Server $server, $taskId, $reactorId, $data) use ($app) {
return $app->taskExecute($server, $taskId, $reactorId, $data);
}
);
Swoole\Server->task(Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface $data, int $dstWorkerId = -1, callable $finishCallback = null)
$result = Swoole\Server->taskwait((Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface $data, float $timeout = 0.5, int $dstWorkerId = -1) :TaskResulted
#Sidalex\SwooleApp\Classes\Tasks\Data\BasicTaskData
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
/**
* @var $taskResult TaskResulted
*/
$taskResult = $this->server->taskwait($taskData);
var_export($taskResult->getResult());
$taskData = new BasicTaskData('Sidalex\TestSwoole\Tasks\TestTaskExecutor', ['test' => 'test1']);
/**
* @var $taskResult TaskResulted
*/
$taskResult = $this->server->taskwait($taskData);
var_export($taskResult->getResult());
$config = new stdClass();
$config->CyclicJobs = [
"Sidalex\TestSwoole\CyclicJobs\TestCyclicJobs",
];
{
"CyclicJobs": [
"Sidalex\\TestSwoole\\CyclicJobs\\TestCyclicJobs"
]
}
class MyCyclicJob implements CyclicJobsInterface
{
private $application;
private $server;
public function __construct(Application $application, Server $server)
{
$this->application = $application;
$this->server = $server;
}
public function getTimeSleepSecond(): float
{
// Возвращает время задержки в секундах
return 5.0;
}
public function runJob(): void
{
$arr = [1,2,3,4,5,6,7,8,9];
foreach ($arr as $value){
if($value % 3 == 0)
{
echo "example";
}
}
}
}
#[\Sidalex\SwooleApp\Classes\Controllers\Route(uri: '/api/{v1}/get_resume',method:"POST")]
class TestController extends AbstractController
{
use Sidalex\SwooleApp\Classes\Controllers\Route;
#[Route(uri: '/api/{v1}/get_resume',method:"POST")]
class TestController extends AbstractController
{
$this->response->setHeader('Content-Type', 'application/json');
$this->response->end(
json_encode(
[
'status' => 'error',
'message' => 'collection '.$this->uri_params['collection_name'] . 'not found in collectionList',
]
)
);
$obj = json_decode($this->request->getContent());
class NotFoundController implements ControllerInterface
{
private \Swoole\Http\Request $request;
private \Swoole\Http\Response $responce;
/**
* @var array|string[]
*/
private array $uri_params;
public function __construct(\Swoole\Http\Request $request, \Swoole\Http\Response $response, array $uri_params=[])
{
$this->request = $request;
$this->responce = $response;
$this->uri_params = $uri_params;
}
public function execute(): \Swoole\Http\Response
{
$this->responce->setStatusCode(404);
$this->responce->setHeader('Content-Type', 'application/json');
$this->responce->end(json_encode(
[
'codeStatus' => '404',
'text' => 'Page not found'
]
));
return $this->responce;
}
public function setApplication(Application $application, Server $server)
{
}
}