[ANNOUNCEMENT] swoole-4.4.0 (stable) Released.
| From: | PECL Announce | Date: | Sat, 06 Jul 2019 08:08:22 +0000 |
| Subject: | [ANNOUNCEMENT] swoole-4.4.0 (stable) Released. | ||
| Groups: | php.pecl.dev | ||
| Request: | Send a blank email to pecl-dev+get-16072@lists.php.net to get a copy of this message | ||
The new PECL package swoole-4.4.0 (stable) has been released at https://pecl.php.net/.
Release notes
-------------
Backward incompatible changes
---
- Consistent with
PHP official, no longer supports PHP7.0 (@matyhtf)
- Remove the Serialize module, which is maintained in a separate
[ext-serialize](https://github.com/swoole/ext-serialize) extension. Reason: Due to frequent changes
to the PHP kernel, stability cannot be guaranteed
- Remove the PostgreSQL module and maintain it in a separate
[ext-postgresql](https://github.com/swoole/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 changes
* Coroutine\MySQL->fetch/nextResult is optimized for on-demand reads, which will
trigger IO scheduling
* When the defer attribute is on, the request of statement needs to
use statement->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 the IO operation fails
- Coroutine\Http\Client->set_cookie_headers no longer have key names (#2664)
(@twose)
Deprecated content
---
- The Buffer module will be discarded. Reason: It is highly replaceable and has low
usage. It can be replaced by PHP string or fopen("memory")
- The Lock module will be discarded. Reason for discarding: There may be problems with
locking in the Coroutine. You can use Chan to implement the Lock of the Coroutine
version
- Since async stream_socket_pair is introduced, it is recommended to enable the hook by
flag SWOOLE_HOOK_STREAM_FUNCTION instead of SWOOLE_HOOK_STREAM_SELECT
New features
---
+ Added [Library](https://github.com/swoole/swoole-src/tree/master/library), using pure
PHP to write kernel functions instead of C/C++, providing the following
features
+ Added high quality PHP module Coroutine\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 call
Runtime::enableCoroutine(SWOOLE_HOOK_CURL) to open (@matyhtf) (@Yurunsoft)
+ Use PHP code to implement exec/shell_exec of Coroutine
version (#2657) (@Yurunsof)
+ When RuntimeHook is turned on, the function array_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 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 by
php.ini. For details, see
[preemptive_scheduler](https://github.com/swoole/swoole-src/tree/master/tests/swoole_coroutine_scheduler/preemptive)
(@shiguangqi)
+ Added Timer::list() to get Timer\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 and setOption for
Coroutine\Socket (9d13c29) (@matyhtf)
+ Added $master_pid property and shutdown method to
Process\Pool (a1d6eaa) (@matyhtf)
+ Added the 4th parameter of the constructor of Process\Pool, when true, the underlying
layer will automatically create the Coroutine in the onWorkerStart callback (8ceb32cd)
(@matyhtf)
+ Support non-blocking stream_socket_pair in Runtime hook (#2546) (@matyhtf)
+ Added static_handler_locations setting of Http\Server to set static file
path (@matyhtf)
+ Added Coroutine\Http\Client->setBasciAuth method to automatically send
Authorization 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 (now fetch 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
+ Coroutine\Redis compatibility mode, enabled by
$redis->set(['compatibility_mode' => true]), which can make the result
of hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore consistent with
phpredis (#2529) (@caohao-php)
+ Now 100K Coroutine are allowed to exist at the same time by default (c69d320b)
(@twose)
+ Support bailout (can exit the process correctly when a fatal error occurs in the
Coroutine) (#2579) (@twose)
+ Server can display a friendly 400/404/503 when error occurred (@matyhtf)
(f3f2be9d)
+ Server enable reload_async and send_yield by default
(#2555) (9d4a4c47) (@matyhtf)
+ Server->onFinish callback is in Coroutine (@twose)
+ Coroutine\Http\Client enable websocket_mask by default
(c02f4f85) (@twose)
+ Scheduling operation of Channel outside the Coroutine is no longer allowed (519b6043)
(@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 (4b833a3d) (@matyhtf)
+ Memory optimization of Socket->recv (642a3552) (@twose)
+ Floating point calculation optimization (#2572) (@tangl163)
+ All built-in classes prohibit cloning/serializing/unseting-declared-properties (f9c974b8) (@twose)
+ Server->bind will generate a warning and return false when uid is
more than UINT32_MAX
+ Support PHP7.4 (#2506) (@twose)
Fixed
---
* Fixed getProcess of Process\Pool (#2522) (@matyhtf)
* Fixed a bug that exceptions were ignored in some special cases (@twose)
* Fixed memory leak by timer after fork process (8f3abee7) (@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) (22504dd4) (@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 [?](https://wiki.swoole.com/wiki/page/1487.html)
----
+ Added Swoole\Coroutine\Scheduler class as the entry for the cli script,
replacing go() + Swoole\Event::wait()
+ Added Swoole\Coroutine\Run function to provide wrapper for
Swoole\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](https://github.com/swoole/assert)
based on [webmozart/assert](https://github.com/webmozart/assert) secondary development (@twose)
+ Completely abolish the Windows support plan
+ Coroutine\Http2\Client refactor (f64874c3) (@matyhtf)
+ The faster callback function caller (@twose)
Experimental content
---
+ May add Coroutine\Server and Coroutine\Http\Server in 5.0
Package Info
-------------
Event-driven asynchronous and concurrent networking engine with high performance for PHP.
- event-driven
- coroutine
- asynchronous non-blocking
- multi-thread reactor
- multi-process worker
- multi-protocol
- millisecond timer
- built-in http/websocket/http2 server
- coroutine http/websocket client
- coroutine mysql client
- coroutine redis client
- coroutine read/write file system
- coroutine dns lookup
- support IPv4/IPv6/UnixSocket/TCP/UDP
- support SSL/TLS encrypted transmission
Related Links
-------------
Package home: https://pecl.php.net/package/swoole
Changelog: https://pecl.php.net/package-changelog.php?package=swoole
Download: https://pecl.php.net/get/swoole-4.4.0.tgz
Authors
-------------
shen zhe <shenzhe163@gmail.com> (developer)
Han Tianfeng <mikan.tenny@gmail.com> (lead)
QiHao ChenCao <twose@qq.com> (developer)