swoole is a php extension which is a Asynchronous and concurrent and distributed networking framework for PHP
Its could replace nodejs fully because its full asynchronous non-blocking feature.
STEP 1:
pecl install swoole
and add it to php.ini
STEP 2:
make file swoole-server.php in project base dir
make(Illuminate\Contracts\Http\Kernel::class);
// $http = new swoole_http_server("127.0.0.1", 9501); // only listen to localhost
$http = new swoole_http_server("0.0.0.0", 9501);
$http->on('request', function ($request, $response) use($kernel) {
// code from Illuminate\Http\Request::capture
$l_request= new Symfony\Component\HttpFoundation\Request(
isset($request->get)?$request->get:[], isset($request->post)? $request->post:[], [],
isset($request->cookie)?$request->cookie:[], isset($request->files)? $request->files:[], $request->server);
if (0 === strpos($l_request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded')
&& in_array(strtoupper($l_request->server->get('REQUEST_METHOD', 'GET')), array('PUT', 'DELETE', 'PATCH'))
) {
parse_str($l_request->getContent(), $data);
$l_request->request = new Symfony\Component\HttpFoundation\ParameterBag($data);
}
Illuminate\Http\Request::enableHttpMethodParameterOverride();
$l_request=Illuminate\Http\Request::createFromBase( $l_request);
$l_response = $kernel->handle( $l_request );
ob_start();
$l_response->send();
$kernel->terminate($l_request, $l_response);
$result = ob_get_clean();
$response->end($result);
});
$http->start();
}
public static function getInstance() {
if (!self::$instance) {
self::$instance = new HttpServer;
}
return self::$instance;
}
}
HttpServer::getInstance();
STEP3:
php swoole-server.php
and then visit 127.0.0.1:9501
STEP4:
swoole server does not implement all http features , so we can use nginx as proxy server, add this to a nginx site config
location / {
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
}
}
swoole is used by many large firms in China , swoole server has far more QPS than php-fpm, nodejs server, golang server.