Skip to content

Releases: swoole/swoole-src

v4.4.5

30 Aug 13:02
Compare
Choose a tag to compare

Enhancement

Fixed

v4.4.4

18 Aug 01:49
Compare
Choose a tag to compare

Enhancement

Fixed

v4.4.3

02 Aug 14:51
Compare
Choose a tag to compare

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

v4.4.2

26 Jul 07:12
Compare
Choose a tag to compare

Enhancement

Fixed

v4.4.1

16 Jul 06:10
Compare
Choose a tag to compare

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

v4.3.6

16 Jul 08:45
Compare
Choose a tag to compare

Fixed

v4.4.0

06 Jul 06:57
Compare
Choose a tag to compare

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 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 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, 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) (@Yurunsoft)
    • 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 (@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 (8ceb32c) (@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 (c69d320) (@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) (f3f2be9)
  • Server enable reload_async and send_yield by default (#2555) (9d4a4c4) (@matyhtf)
  • Server->onFinish callback is in Coroutine (@twose)
  • Coroutine\Http\Client enable websocket_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 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 (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 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 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 and Coroutine\Http\Server in 5.0

v4.4.0-beta

22 Jun 07:16
Compare
Choose a tag to compare
v4.4.0-beta Pre-release
Pre-release
Optimization

v4.3.5

14 Jun 08:34
Compare
Choose a tag to compare

v4.4.0-alpha

05 Jun 01:17
Compare
Choose a tag to compare
v4.4.0-alpha Pre-release
Pre-release
Create proc.php