Releases: swoole/swoole-src
Releases Β· swoole/swoole-src
v4.4.5
Enhancement
- Better Reactor (@matyhtf)
- Better AIO (@twose)
- Better Redis (3608f4c) (@twose)
- Handle Empty upload files (#2779) (@sshymko)
- Add File uploads array parser (#2773) (@sshymko)
- Support PURGE (#2754) (#2764) (@sshymko)
- Allow HTTP methods like GETX POSTX PUTX etc (#2772) (@doubaokun)
- Reduce the default max_wait_time to 3 (ed5c838) (@twose)
Fixed
- Fixed AIO memory error (@twose)
- Fixed compilation without zlib (f5a0336) (@twose)
- Fixed timeout param of stream (c827598) (@twose)
- Fixed missing http headers (#2789) (@doubaokun)
- Fixed client type (#2771) (@doubaokun)
v4.4.4
Enhancement
- Perfect array_walk for coroutine (#2740) (@twose)
- Add
Swoole\Constant
to replace string (@matyhtf) (@twose) - Add alias
Co::dnsLookup
ofswoole_async_dns_lookup_coro
(42293ef) (@matyhtf) - Expend default HTTP_FORM_KEYLEN to 512 (#2734) (@sshymko)
- Better dns resolver (c6deff1) (@matyhtf)
- Support HTTP PURGE (#2462) (@sshymko)
- Response 400 for bad request (#2751) (@twose)
- Decoupling sockets and reactor (internal) (@twose)
- Add Timer::set / Process->set / Process\Pool->set (@twose)
- Optional hugepage feature support for FreeBSD (#2757) (@devnexen)
Fixed
- Fixed macOS not support extern thread_local () (@matyhtf)
- Fixed SSL dispatch (#2736) (@matyhtf)
- Fixed aio thread num (#2745) (@matyhtf)
- Fixed async_thread (#2747) (@matyhtf)
- Fixed Swoole\Client::select timeout (#2758) (@LeiZhang-Hunter)
- Fixed empty timer (#2749) (@twose)
- Fixed zlib decompression (#2762) (@twose)
v4.4.3
Enhancement
- Continue to maintain the Lock module (@matyhtf)
- Add zpopmin and zpopmax for Redis 5 (#2684) (@ruesin)
- Remove Http\Client global buffer in kernel (@twose)
- Support ppc32/ppc64/s390x arch (#2692) (@matyhtf)
- Support SSL context options for php_stream (#2717) (@twose)
- Support multi-threading (libswoole) (@matyhtf)
- Support SSL shutdown (#2717) (@twose)
Fixed
- Fixed bug: call Request->rawContent/getData after Response->end (b989ba9) (@twose)
- Fixed OpenSSL protocol version check (c89e56f) (@twose)
- Fixed bug: MySQL double free when io error occurred (d62d543) (@twose)
- Fixed Http2 Client null pointer (537557d) (@twose)
- Fixed HTTP2 SSL settings (#2725) (@twose)
- Fixed DNS errno (@matyhtf)
- Fixed mem invalid read with fgets (5dc0670) (@matyhtf)
- Fixed swoole_async_dns_lookup_coro (b9caf5d) (@matyhtf)
- Fixed ManagerStop failed (7977fab) (@matyhtf)
v4.4.2
v4.4.1
Enhancement
- Support send response with non-zero Content-length without body for HEAD request (#2690) (@matyhtf)
- Support
Coroutine::getPcid
by a random cid (#2669) (@huanghantao)
Fixed
- Fixed
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
(#2667) (@twose) - Fixed signal listener (#2675) (@matyhtf)
- Fixed MySQL incompatibility changes (#2674) (@twose)
- Fixed add event after server start (#2673) (@matyhtf)
- Fixed
static_handler
can not decode url (#2676) (@twose) - Fixed task worker warning (#2689) (@Yurunsoft)
- Fixed
Http\Request->rawContent
(#2682) (@twose) - Fixed invalid read when
Timer::clearAll
(6b0263b) (@matyhtf) - Fixed
Coroutine\Http\Client
send failed (432259d) (@twose)
v4.3.6
v4.4.0
Backward incompatible changes
- Consistent with
PHP
official, no longer supportsPHP7.0
(@matyhtf) - Remove the
Serialize
module, which is maintained in a separate ext-serialize extension. Reason: Due to frequent changes to thePHP
kernel, stability cannot be guaranteed - Remove the
PostgreSQL
module and maintain it in a separate ext-postgresql extension. Reason:PostgreSQL
uses asynchronous ways in the kernel and lacks the necessary unit tests to guarantee quality Runtime::enableCoroutine
is no longer automatically compatible with the internal and external environment of the Coroutine. Once enabled, all blocking operations must be called in the Coroutine (@matyhtf)
- Due to the introduction of the new
Coroutine\MySQL
client driver, the underlying design is more standardized, but there are some small downward incompatible changesCoroutine\MySQL->fetch/nextResult
is optimized for on-demand reads, which will trigger IO scheduling- When the
defer
attribute is on, the request ofstatement
needs to usestatement->recv
to receive the response - When the
defer/fetch_mode
feature is enabled, if there is unreceived data, a new request will be banned - Unlike asynchronous, the
connected
attribute is no longer updated based on events in real-time (It's not reliable) but is updated after theIO
operation fails
Deprecated content
- The
Buffer
module will be discarded. Reason: It is highly replaceable and has low usage. It can be replaced byPHP
string orfopen("memory")
- The
Lock
module will be discarded. Reason for discarding: There may be problems with locking in the Coroutine. You can useChan
to implement the Lock of the Coroutine version - Since async
stream_socket_pair
is introduced, it is recommended to enable the hook by flagSWOOLE_HOOK_STREAM_FUNCTION
instead ofSWOOLE_HOOK_STREAM_SELECT
New features
- Added Library, using pure
PHP
to write kernel functions instead ofC/C++
, providing the following features- Added high quality
PHP
moduleCoroutine\WaitGroup
(@twose) - Use the
PHP
code to implement the CURL hook, one-click to make the CURL non-blocking, currently the experimental feature, you need to callRuntime::enableCoroutine(SWOOLE_HOOK_CURL)
to open (@matyhtf) (@Yurunsoft) - Use
PHP
code to implementexec
/shell_exec
of Coroutine version (#2657) (@Yurunsoft) - When
RuntimeHook
is turned on, the functionarray_walk
,array_walk_recursive
will be replaced by the version of Swoole, which will solve the problem that the native function cannot be reentrant, but it will not be able to traverse object (@matyhtf) (@twose)
- Added high quality
- Added a new Coroutine Preemptive Scheduler to prevent the Coroutine from taking too long CPU time to cause other Coroutine to starve. Open the
swoole.enable_preemptive_scheduler = On
byphp.ini
. For details, see preemptive_scheduler (@shiguangqi) - Added
Timer::list()
to getTimer\Iterator
, which can traverse all timers,Timer\clearAll
clears all timers,Timer\info(int $id)
gets timer information,Timer::stats()
gets the global timer status (#2498) (@twose) - Added two methods
getOption
andsetOption
forCoroutine\Socket
(9d13c29) (@matyhtf) - Added
$master_pid
property andshutdown
method toProcess\Pool
(a1d6eaa) (@matyhtf) - Added the 4th parameter of the constructor of
Process\Pool
, when true, the underlying layer will automatically create the Coroutine in theonWorkerStart
callback (8ceb32c) (@matyhtf) - Support non-blocking
stream_socket_pair
in Runtime hook (#2546) (@matyhtf) - Added
static_handler_locations
setting ofHttp\Server
to set static file path (@matyhtf) - Added
Coroutine\Http\Client->setBasciAuth
method to automatically sendAuthorization
header (#2542) (@hongbshi) - Added
Coroutine\Http2\Client->ping
method (40041f6) (@shiguangqi) - Added
task_use_object
(#2659) (aa01317) (@twose)
Enhancement
- New
Coroutine\MySQL\Client
driver (#2538) (@twose)- The underlying programming mode using
C++
and Coroutine (sync writing, async performance) - Support SSL connection (configure
['ssl' => true]
when connect) - Support request with large data (unlimited)
- Support response with large data (unlimited)
- Support
fetch
to read by line (nowfetch
is read on demand, data without fetch does not consume user memory) (#2106) - Support
nextResult
read on demand (ibid) - Optimized protocol parser
date
related type decimal precision support- Error code and information are consistent with
PDO
/mysqli
- The underlying programming mode using
Coroutine\Redis
compatibility mode, enabled by$redis->set(['compatibility_mode' => true])
, which can make the result ofhmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore
consistent with phpredis (#2529) (@caohao-php)- Now
100K
Coroutine are allowed to exist at the same time by default (c69d320) (@twose) - Support
bailout
(can exit the process correctly when a fatal error occurs in the Coroutine) (#2579) (@twose) Server
can display a friendly400/404/503
when error occurred (@matyhtf) (f3f2be9)Server
enablereload_async
andsend_yield
by default (#2555) (9d4a4c4) (@matyhtf)Server->onFinish
callback is in Coroutine (@twose)Coroutine\Http\Client
enablewebsocket_mask
by default
(c02f4f8) (@twose)- Scheduling operation of
Channel
outside the Coroutine is no longer allowed (519b604) (@twose) WebSocket\Server
will close the connection when the handshake fails (#2510) (@twose)- Under the
Linux
, the dead parent process will automatically send a signal to kill the child process (4b833a3) (@matyhtf) - Memory optimization of
Socket->recv
(642a355) (@twose) - Floating point calculation optimization (#2572) (@tangl163)
- All built-in classes prohibit cloning/serializing/unseting-declared-properties (f9c974b) (@twose)
Server->bind
will generate a warning and return false whenuid
is more thanUINT32_MAX
- Support
PHP7.4
(#2506) (@twose)
Fixed
- Fixed
getProcess
ofProcess\Pool
(#2522) (@matyhtf) - Fixed a bug that exceptions were ignored in some special cases (@twose)
- Fixed memory leak by timer after
fork
process (8f3abee) (@twose) - Fixed timezone on non-Linux systems (#2584) (@devnexen)
- Fixed
enable_coroutine=false
+task_enable_coroutine=true
(#2585) (@matyhtf) - Fixed Http2's trailer method can not output a empty value header (#2578) (@twose)
- Fixed
Coroutine\Http\Client->setCookies
memory error in special cases (#2644) (@Yurunsoft) - Fixed #2639 (#2656) (@mabu233)
- Fixed
arginfo_swoole_process_pool_getProcess
(#2658) (@mabu233) - Fixed
static_handler
does not support soft links (@matyhtf) - Fixed a bug (I don't know how to describe it) (22504dd) (@matyhtf)
- Fixed
Server->getClientInfo
error (#2639) (@matyhtf) - Fixed an illegal operation of the same Socket with multiple Coroutine operations (#2661) (@twose)
- Fixed swoole_table iterator coredump (#2663) (@mabu233)
Coroutine scheduler ?
- Added
Swoole\Coroutine\Scheduler
class as the entry for thecli
script, replacinggo() + Swoole\Event::wait()
- Added
Swoole\Coroutine\Run
function to provide wrapper forSwoole\Coroutine\Scheduler
go() + Swoole\Event::wait()
may be deprecated
Internal
- Continuous underlying code quality optimization work (@swoole)
- More unit tests, and use the assertion library swoole/assert based on webmozart/assert secondary development (@twose)
- Completely abolish the
Windows
support plan Coroutine\Http2\Client
refactor (f64874c) (@matyhtf)- The faster callback function caller (@twose)
Experimental content
- May add
Coroutine\Server
andCoroutine\Http\Server
in5.0
v4.4.0-beta
Optimization
v4.3.5
v4.4.0-alpha
Create proc.php