Swoole PHP 4.6.0 released: new HTTP API, Native CURL, Sockets hooks and more

Swoole v4.6.0 is released with multiple new features and enhancement recently.

From Swoole v4.6.0, PHP 7.1 is no longer supported along with PHP version lifecycle.

Native CURL and Socket API hooks

With Swoole PHP, you can write the async applications with sequential codes in a Swoole PHP fiber / coroutine to avoid callback hell like the other callback-based async frameworks.

CURL is widely used by all PHP applications. To transparently support PHP CURL API, previously the native CURL is replaced automatically in Swoole Server with the Swoole CURL written with PHP. Although most APIs are identical with the native CURL, you may run into a difference in some corner cases.

This has been improved in Swoole v4.6.0, you will use the async ready native CURL library hooked in the underlayer by Swoole Server.

New HTTP Request and Response API

It will be more flexible when using the new API to create or parse, modify the HTTP request object.

<?php
use Swoole\Http\Request;

$data = "GET /something?hello=world HTTP/1.1\r\n";
$data .= "Host: 127.0.0.1\r\n";
$data .= "Connection: keep-alive\r\n";
$data .= "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36\r\n";
$data .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n";
$data .= "Accept-Encoding: gzip, deflate, br\r\n";

$request = Request::create(['parse_cookie' => false]);
var_dump($request);

var_dump($request->isCompleted());
var_dump($request->parse($data));

var_dump($request->parse("\r\n"));
var_dump($request->isCompleted());

var_dump($request);
var_dump($request->cookie);
<?php
$server = new swoole_http_server('127.0.0.1', 9000, SWOOLE_BASE);
$server->on('request', function ($req, $resp) {
    var_dump($resp->isWritable());
    $resp->end('Hello swoole.co.uk');
    var_dump($resp->isWritable());
});
$server->start();

List of changes in v4.6.0

Backward compatibility Break
---
* Removed the maximum limit of session id, never repeat (#3879) (@matyhtf)
* Disabled unsafe function when use Coroutine, including pcntl_fork/pcntl_wait/pcntl_waitpid/pcntl_sigtimedwait (#3880) (@matyhtf)
* Enabled coroutine hook by default (#3903) (@matyhtf)

Remove
---
- No longer support PHP-7.1 (swoole/[email protected]) (swoole/[email protected]) (@matyhtf)

Deprecated
---
- Marked the Event::rshutdown() as deprecated, please use Coroutine::run instead (#3881) (@matyhtf)

New APIs
---
+ Supported setPriority/getPriority (#3876) (@matyhtf)
+ Supported native-curl hook (#3863) (@matyhtf) (@huanghantao)
+ Supported object style callback parameters for Server, off by default (#3888) (@matyhtf)
+ Supported ext-sockets hook (#3898) (@matyhtf)
+ Supported duplicate header (#3905) (@matyhtf)
+ Supported SSL sni (#3908) (@matyhtf)
+ Supported hook stdio (#3924) (@matyhtf)
+ Supported capture_peer_cert option for stream_socket (#3930) (@matyhtf)
+ Added Http\Request::create/parse/isCompleted (#3938) (@matyhtf)
+ Added Http\Response::isWritable (swoole/[email protected]) (@matyhtf)

Enhancement
---
+ All time accuracy of Server changed from int to double (#3882) (@matyhtf)
+ Added poll EINTR check for swoole_client_select (#3909) (@shiguangqi)
+ Added coroutine deadlock detect (#3911) (@matyhtf)
+ Supported closing the connection in another process with server base mode (#3916) (@matyhtf)
+ Optimized send to worker from master, reduced memory copy (#3910) (@huanghantao) (@matyhtf)

Fixed
---
* Pop Coroutine::Channel data when channel is closed (swoole/[email protected]) (@matyhtf)
* Fixed memory error when use JIT (#3907) (@twose)
* Fixed port->set() dtls compile error (#3947) (@Yurunsoft)
* Fixed connection_list error (#3948) (@sy-records)
* Fixed ssl verify (#3954) (@matyhtf)
* Clear all columns when incr and decr (#3956) (@matyhtf) (@sy-records)
* Fixed failed to compile with LibreSSL 2.7.5 (#3962) (@matyhtf)
* Fixed undefined constant CURLOPT_HEADEROPT and CURLOPT_PROXYHEADER

Kernel
---
* Ignored SIGPIPE signal by default (swoole/[email protected]) (@matyhtf)
* Supported running php and c coroutines at same time (swoole/[email protected]) (@matyhtf)
* Added TEST(coroutine_base, get_elapsed) (#3961) (@luolaifa000)
* Added TEST(coroutine_base, get_init_msec) (#3964) (@luffluo)

Following an update to quick fix some issues, v4.6.1 is released with no major API changes.

List of changes in v4.6.1

Enhancement
---
+ Added --enable-thread-context option (#3970) (@matyhtf)
+ Strict session_id, check the connection activity (#3993) (@matyhtf)
* Optimized CURLOPT_PROXY, support user, pass and scheme (swoole/library#87) (sy-records)

Fixed
---
* Fixed minimal PHP version (#3979) (@remicollet)
* Fixed pecl install missing enable-swoole-json and enable-swoole-curl options (#3980) (@sy-records)
* Fixed openssl thread safety issue (swoole/[email protected]) (@matyhtf)
* Fixed enableSSL coredump (#3990) (@huanghantao)

Kernel
---
* Optimized ipc writev, avoid coredump how event data is null (#3994) (@matyhtf)

You can upgrade to Swoole v4.6.1 now:

pecl install swoole