Login  |  Packages  |  Support  |  Bugs

Return

Changelog for swoole
Release What has changed?
4.4.4 Enhancement
---
+ Perfect array_walk for coroutine (#2740) (@twose)
+ Add `Swoole\Constant` to replace string (@matyhtf) (@twose)
+ Add alias `Co::dnsLookup` of `swoole_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 #2749 (@twose)
4.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 ppc 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)
4.4.2 Enhancement
---
+ Added `idle_worker_num` and `task_idle_worker_num` to `Server::stats` (#2687) (@matyhtf)
+ PHP7.4 Compatibility (5bf6491) (@twose) (#2707) (@remicollet)
+ Clear reactor when error occured (61536e7) (@twose)

Fixed
---
* Fixed `Socket->sendto` (7bd8492) (@twose)
* Fixed `WaitGroup->wait` timeout type (acf20c3) (@twose)
* Fixed #2710 (#2710) (@twose)
* Fixed event num of signal in OSX (cf32c35) (@matyhtf)
4.3.6 Fixed
---
* Fixed #2661 (#2661) (@twose)
* Fixed hang on MacOS (dcb14488) (@matyhtf)
* Fixed SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER (#2667) (@twose)
* Fixed global value (edfdc544) (@twose)
4.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)
4.4.0 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`
4.3.5 Fixed
---
* Fixed #2610
4.3.4 Fixed
---
* Fixed SSL certificate configuration failure (#2573) (@twose)
* Fixed onReceive callback null pointer (#2568) (@twose)
* Fixed ssl->ciphers null pointer (#2553) (@matyhtf)
* Fixed document_root can't be a relative path (#2513) (@windrunner)
* Fixed HTTP proxy that does not need to handshake (16ea176f) (@matyhtf)
4.3.3 Fixed
---
* Fixed Http2 ping frame bug (0f074a61) (371d0b86) (e28ed13c) (@twose) (@shiguangqi)
* Fixed OSX signal bug (6d06a2c2) (6b66f56c) (@twose)
* Fixed `Coroutine\Http\Client->setData` (53d9d1ac) (@twose)
* Remove HAVE_IPV6 (3effad3c) (@matyhtf)
* PHP7.4 compatibility (#2506) (@twose)
4.3.2 Enhancement
---
+ Dynamically `ipc_size`, greatly improving IPC performance in Process mode (48c1b2b) (3e85511) (@matyhtf)
+ Improve `Runtime::enableCoroutine` API, support passing in flag directly as the first parameter (464ad65) (7d4be65) (@twose)
+ SSL connection will automatically configure the ssl_host_name (563e677) (@twose)
+ Some NOTICE level information will be changed to INFO level, such as server restart information, etc (d87d63a) (@twose)
+ Add constants for`dispatch_func` return value: `SWOOLE_DISPATCH_RESULT_DISCARD_PACKET`, `SWOOLE_DISPATCH_RESULT_USERFUNC_FALLBACK` (#2451) (@windrunner414)
+ `swoole_strerror` support parse system error code and swoole error code automatically (d89c565) (#2458) (@twose) (@mabu233)
+ Built-in Socket related constants, and it would not conflict with Socket extensions (1e1b1d1) (@twose)
+ Add http_parse_cookie option (dce290ef) (@twose)
+ Decode path_info (82f8e4fc) (@twose)
+ Support PHP_STREAM_OPTION_CHECK_LIVENESS (6ff292da) (@twose)

Fixed
---
* Fixed `CID-1478883`, `CID-1478887`, `CID-1478891`, `CID-1478894` (688713f) (17805af) (e8f1473) (58a098f) (@matyhtf)
* Fixed invalid memory access due to fd reuse (08b37fd) (@twose)
* Fixed connection reset due to fd reuse (#2444) (@twose)
* Fixed the bug where the GC didn't work during the shutdown (causing a memory leak) (836ea23) (15ba9f7) (@twose)
* Fixed the invalidation of `Co\Iterator` (db9e155) (@twose)
* Fixed`Co::exec` causes process stuck (8a1d776) (22252d7) (@matyhtf)
* Fixed BADF caused by `exportSocket` (ebbce67) (c7af14c) (c717122) (@matyhtf)
* Complete `Swoole\Buffer` property declaration (2f66319) (@twose)
* Complete `Co::exec` arg info (7da1376) (@twose)
* Fixed the wrong error code when the MySQL client host was invalid (#2367) (@twose)
* Fixed the problem that the sync client is interrupted by the signal (#2448) (@liues1992)
* Fixed build check with `i?86/aarch64` (#2460) (@dixyes)
* Fixed `poll` with timeout `0` (1143743) (@matyhtf)
* Fixed `stream_select` with `null` timeout (e8a58d5) (c166b7a) (@twose)
* Fixed `stream_select` behavior (d8e7a41) (3ce877d) (2819232) (cd8e4c7) (@twose) (@matyhtf)
* Generate Swoole Warning instead of PHP Warning (unmanageable error) (955d021) (@twose)
* Fixed `Co\Client` construct failed (#2466) (@twose)
* Fixed Http2 cookie (e18d66b) (@twose)
* Fixed `Process->getProcess` free (fe1ca17) (@matyhtf)
* Fixed Coroutine flock (23401d8) (86cf0c9) (@matyhtf)
* Fixed `Co\Http2\Client` null ptr (66c31ee) (@twose)
* Fixed `Socket->accept` return Socket object with uninitialised type (5d26b00) (@twose)
* Fixed `Co\Http\Client` with websocket protocol can not support full duplex (#2477) (523c588) (@twose)
* Complete `Event::dispatch`, `Event::isSet` method arg info (#2491) (@deminy)
* Fixed invalid `Connection\Iterator` (#2492) (@matyhtf)
* Fixed `reload_async` with Timer (9eaf32cc) (bacb5228) (@matyhtf) (@twose)
* Cannot use msgqueue when task_enable_coroutine is enable (#2497) (@matyhtf)
* Fixed `read_eof` bug (e936c764) (@matyhtf)
* Sockets C++ compatibility (3cf7dcba) (@twose)
4.3.1 Enhancement
---
* After `Server` enabled `ssl_verify_peer`, the client without the certificate will be forcibly disconnected (31a038f) (@shiguangqi)
* `MySQL\Statement::execute` can accept null arguments (0207ebc) (@twose)
* Now part of the fatal error message caused by illegal code will show the call stack trace, the warning will be more friendly (such as calling the coroutine method outside the coroutine) (@twose)

Fixed
---
* Fixed`swSignalfd_set` unexpected result (#2397) (@junwei-qu)
* Fixed `Socks5`proxy memory error (9dd0b7c) (@twose)
* Fixed`Redis` backward compatibility (connect timeou configuration does not work) (21f34cc) (@twose)
* Fixed `Server` reload BUG (31a038f) (@shiguangqi)
* Fixed `Co\Http\Client` with defer mode and call `recv` with the timeout agrument but timeout does not work (2c1cd83) (@twose)
* Fixed call the coroutine method out side the coroutine core dump (2bf6b09) (@twose)
* Fixed Swoole + PHP73 with `pcre.jit` on MacOS core dump (17ccaf3) (@twose)
* Fixed build failed on 32-bit env (#2411) (@twose)
* Fixed `Co\Socket` construct failed (@twose)
* Fixed`Process\Pool` system msg queue not work (#2424) (@matyhtf)
* Fixed `user` and `group` configurations not work in `Server` with BASE mode (#2402) (@matyhtf)
* Fixed `Co\MySQL` connect timeout coredump on low version of Linux (d6736e4) (@twose)
4.3.0 New Features
---
+ `Co::getContext` to get the coroutine context object ([RFC-1018](https://github.com/swoole/rfc-chinese/issues/45)) (@twose)
+ `Co::getPcid` to get the parent coroutine ID ([RFC-1017](https://github.com/swoole/rfc-chinese/issues/41)) (@twose)
+ `Co::exists` to know if a coroutine exists (@twose)
+ Runtime Coroutine Hook supports `stream_select` (#2358) (@matyhtf)
+ `max_wait_time` configuration support in BASE mode (#2282) (@shiguangqi)
+ Support for one-way delivery tasks in the `Master/Manager/User` process ([RFC-1015](https://github.com/swoole/rfc-chinese/issues/38)) (@matyhtf)
+ `Co\Socket` has two new APIs `recvAll` and `sendAll` to ensure complete receive/send data until completion or error (3700cbb) (@twose)
+ `Process` supports the coroutine mode, please refer to ([Use Coroutine in Process](https://wiki.swoole.com/wiki/page/p-process_coro.html))
+ `Process->exportSocket` to export `Co\Socket` object (91d3621) (@matyhtf)
+ Added `Server->getCallback` method to get the callback function of the specified name of the Server (@matyhtf)

Enhancement
---
* The default max number of connections is 100K (instead of 10K) now. If the system configuration is less than this number, use the system configuration first (3d2e387) (@twose)
* Optimize the code for the `Timer` module, which now runs faster and accepts any number of arguments (#2347) (@twose)
* `Co::stats` will show more information such as the number of events, the number of registered signals, the number of AIO tasks, etc. (@matyhtf)
* `Co::getBackTrace` with no params is equivalent to `debug_backtrace` (@twose)
* `Co::listCoroutines` is renamed to `Co::list`, but the original name is still reserved as an alias (Backward compatibility) (@twose)
* `Table::exist`, `Server::exist` are renamed to `exists`, but the original name is still reserved as aliases (Backward compatibility) (@twose)
* Redis will automatically authenticate and select the corresponding database when it is automatically reconnected. Add API: `getOptions`, `getAuth`, `getDBNum` (#2303) (fdac8a3) (@windrunner414 & @twose)
* The default Socket buffer size on FreeBSD should be 2M (750a29c) (@twose)
* `Server->stats` will show `worker_dispatch_count` which can get the number of requests submitted by the master to the current process. The number of requests in the queue can be got by `worker_dispatch_count - worker_request_count` (a353808) (@matyhtf)
* Remove `Nghttp2` dependencies, no longer need to install it, configuring compilation parameters to open
* Coroutines now have no max nesting level limitation (there are no real nesting relations between coroutines) (5458cbc) (@twose)
* When the coroutine reaches the max limitation, the HTTP server will return a 503 error indicating that the service is temporarily unavailable (ebd377f) (@twose)
* `defer` will now accept a parameter whose value is the return value at the end of the coroutine ([example](https://github.com/swoole/swoole-src/commit/ef978b3b432615b0f392958145d999f4e66584eb)) (@twose)

Fixed
---
* Fixed error when the task method passed a null argument (#2366) (@twose)
* Fixed Http client send big data incomplete (#2360) (@twose)
* Fixed the bug that unprocessed data in the buffer was lost when the TCP client used the eof protocol (a59ae39) (@twose)
* Fixed async security of Server Reload (022f859) (@matyhtf)
* Fixed the index value of the connection iterator (b066146) (@twose)
* Fixed the bug that Set-Cookie special characters are too long to be outputed (#2368) (@mabu233 & @twose)
* Fixed the bug that Http client did not decode the cookie (duplicated encode when sent) (069ca5d) (@twose)
* Fixed Http client download with timeout lead to coredump (#2377) (@matyhtf & @twose)
* Fixed `__call` and `call_user_func*` lead to coredump when calling MySQL client method (#2387) (@matyhtf)
* Fixed coredump when Http2 client header name passed in a number (#2375) (@mabu233)
* Fixed `Swoole\Event::dispatch` behavior not as expected (#2390) (@matyhtf)
* Fixed `Socks5` proxy handshake failed (94ef96c) (@twose)
* Fixed a memory read error caused by a connection failure in a low-version Linux kernel (5adf625) (@matyhtf & @twose)
* Fixed the bug that the server used the timer in the BASE single-process mode not work (82eca13) (@twose)
* Fixed compilation failure due to unstable ZendAPI in low-version (768b8a7) (@shiguangqi)
* Fixed `EINVAL` when calling `sendto` (#2395) (@junwei)

Unsupported
---
- Create server or customs process after using async file IO are not allowed
- Create server or customs process in coroutine are not allowed

Removed
---
- `Websocket\Server->exists` only shows if the connection exists. Please use the `isEstablished` method to get if it is a Websocket client.
- Remove the `swoole.fast_serialize` configuration item
- Removed the PHP Warning when the `Co\Client` method return failed
- Remove the `Server->gzip` method
- Remove `PicoHttpParser` support

Remove async modules
---
Remove all async modules, separate asynchronous extensions to [async-ext](https://github.com/swoole/async-ext):

- Async functions
- MySQL
- Redis
- Http\Client
- Memory\Pool
- MsgQueue
- RingQueue
4.2.13 Fixed (incompatible changes to be noted)
---
* Fixed a problem with Redis subscribe API design issues that caused duplicate subscriptions and subscription messages to be lost (see: [Subscription Mode Documentation](https://wiki.swoole.com/wiki/page/1041.html)) (#2305) (@windrunner414)
* After using coroutine, you can no longer use the traditional connection multiplexing method such as `pconnect`, otherwise it will generate the problem of multi-coroutine handle the same Socket at the same time (7b1e786) (@shiguangqi)

Enhancement
---
+ Coroutine client re-supports full duplex (#2350) (@twosee)
+ Support for secure cross-coroutine socket close (#2327) (@twosee)
+ [RFC-1015](https://github.com/swoole/rfc-chinese/issues/38): Non-Worker Process Allows One-Way Delivery Task (222043a) (@matyhtf)
+ `swoole_strerror` supports automatic convert system error code and Swoole error code to text, no need to specify parameters (c92f444) (@twosee)
+ GDB trace tool supports viewing timer and reactor and hashmap information (2beb563) (@shiguangqi)
+ When MOVED and ASK errors occurred when using Redis cluster, it will be automatically transferred to the corresponding server (#2299) (@windrunner414)
+ Underlying code optimization, reducing memory copy when receiving packages (@matyhtf)
+ Now calling `Co\Socket->close()` will immediately close the fd instead of waiting for the object to be destructed, after closed, use any other API will return a BADF error (consistent with the system API) (7a61963) (@Twosee)
+ Some illegal parameters no longer cause fatal errors but generate a warning, because external parameters are sometimes uncontrollable and there is a certain risk (cd432d3) (@twosee)
+ API compatibility enhancement after use coroutine mode (consistent with sync mode) (36687e8) (@matyhtf)
+ Now swoole\src can be used as a C\C++ library at the same time (libswoole)

Fixed
---
* Fixed a possible coredump problem when there were a large number of objects before the extension load (4ddeedb) (@twosee)
* Fixed coredump caused by attempting to clear the uninitialized DNS cache (#2288) (@mabu233)
* When `task_enable_coroutine` is enabled, incorrectly calling `Server->finish` will trigger a fatal error (156ede6) (@twosee)
* The php.ini configuration now displays `On` and `Off` correctly (instead of 0 and 1) (fe25982) (@twosee)
* Fixed the `Co::getaddrinfo` parameter parser bug (#2273) (@mabu233)
* Fixed fd error when using dispatch_func in UDP mode (#2306) (@mabu233)
* Fixed the bug that dispatch_func does not work when specifying the function name, optimization for reducing memory copy (2bc49e4) (@twosee)
* PHP warnings will no longer be triggered when the task expires (but the underlying log warning of swoole) (54eee5e) (@matyhtf)
* Fixed enable coroutine states after process restarts (#2310)
* Fixed the user process id property (#2313) (@junwei-qu)
* Fixed the bug caused by incorrectly using the asynchronous API in the onStart callback in BASE mode (#2308) (@matyhtf)
* Fixed incorrect manager_id in BASE mode (e18e013) (@matyhtf)
* Fixed mmap using SEEK_END offset error (#2314) (@junwei-qu)
* Fixed getSocket memory leak (ec8c4b2) (@twosee)
* Optimized stream mode (47e0e9e) (@matyhtf)
* Fixed BUG caused by connection multiplexing in sync client with KEEP mode under certain conditions (4c5728b) (@matyhtf)
* Fixed an issue with `Atomic` multiple `wait` and `wakeup` overflows on MacOS (fbccb25) (@twosee)
* Fixed the problem of opening the static_handler directory traversal attack risk, this is a convenient debugging feature, please do not use for production (#2323) (@windrunner414)
* Fixed unchecked return value of futex_wait system call (#2351) (@junwei-qu)
* Fixed bugs in Redis::ZAdd API parsing parameters, and fix other potential type conversion problems (#2321) (21e0497) (a0e612f) (00134cf) (f5a331e) (5f87f17) (a15f094) (67f3285) (808f578) (d118fe3) (5294473) (48f6790) (0105c7f) (ba6c8b4) (@matyhtf)
* Fixed a third-party hook failure that could result from not using function pointers when sending data (89ba2da) (@matyhtf)
* Fixed a memory leak in the Timer::tick method when passing arguments (7e15141) (@mabu233)
* Fixed user process does not exit automatically (2901ce0) (@matyhtf)
* Fixed read operation timeout config (a990540) (@shiguangqi)
* Fixed the problem that the parameter timeout time does not take effect after the `Co\Client` open the package length check (#2346) (@twosee)
* Server is no longer in the control of `buffer_output_size` in BASE mode, only limited by `socket_buffer_size` (#2326) (@matyhtf)
* Fixed compilation error under FREEBSD (#2325) (@matyhtf)
* Compatibility: When the Mysql escape method fails, it will return an empty string instead of FALSE

Others
---
* Swoole\Serialize is now supported for PHP73, but it is still marked as a deprecated feature
4.2.12 + Implement RFC-1014, add `task_enable_coroutine`, remove `task_async` (13ab0f8)
+ Support `gethostbyname` timeout, add async task thread pool (#2256)
+ `Co\PostgreSQL` supports process-oriented prepare (#2223) (#2258)
+ `Co\Redis` client adds getOptions method (#2279)
* Fixed non-coroutine after server reload (#2262) (3ac2337)
* Fixed wrong data in `Table` (#2263) (872e99d)
* Fixed `Co\Http\Client:addFile` error when optional parameter is null (#2270)
* Fixed optional parameter problem for `Co::getaddrinfo` (#2273)
* Fixed timers in user processes (#2274)
* Fixed the availability of gdb debugging tools in C++ (90d148b) (b12f62f)
4.2.11 + Support Timer in manager processes
+ Added DNS cache to improve the connection speed of external network services, default TTL60s, capacity 1000 (#2250)
+ When swoole_strerror the second param is 9, it will convert the swoole-specific error code into the text
* Fixed the problem that the connection timeout does not take effect after the client triggers the DNS query. It may cause the coroutine to hang for a long time and connection resource occupation, please update the affected version (v4.2.10) as soon as possible
* Restore Co\Client backward compatibility, connect timeout parameter will change the default timeout of the client
* Fixed the problem that the change does not take place immediately when the client calls the `set` method after the connection
* Fixed the problem that the error code was not updated after the MySQL handshake failed (#2234)
* Fixed a memory error caused by buffer expansion when MySQL executed a large amount of data (e3c5a28)
* Fixed static compilation problem (#2230)
* Async write files to increase the reference count to prevent premature shutdown (028ddf4)
* Fixed Redis Client use illegal parameter would lead to coredump (5af9f3d)
* Fixed the bug that `stack_size` set by `Co::set` is set to the page size of the PHP stack. It is recommended to use the configuration name of `c_stack_size`. Please do not set it without knowing. If your application has C extension hook to zend_execute, you need to pay special attention to setting the C stack, or you don't need to set it
- Remove `enable-debug-log` from PECL compilation configure option, kernel debug logs must be compiled manually to enable
4.2.10 + Refactor Coroutine Http Client, developers no longer need to care if the connection is broken unless the network is abnormal (auto reconnect)
+ The coroutine switch adds some operations, because PDO changes the global error handler at IO request time
+ Support for creating coroutines using internal C functions
+ Allow closed sockets across coroutines
+ Improve server-side SSL certificate verification
+ Enhanced coroutine iterators and stack traces
* swoole_event_wait is always in the first place in the shutdown function list (#2144)
* Unset properties of built-in objects are not allowed, otherwise coredump may be raised
* For most built-in classes, clone and serialization are not allowed.
* Enhanced coroutine redis, now it can use setOption to adjust the configuration after connecting and auto-reconnect like phpredis
* Fixed task wait memory leak
* Fixed epoll error core dump when waiting for writable event on coroutine socket
* Unified coroutine socket timeout (see: https://wiki.swoole.com/wiki/page/p-socket_timeout.html)
* More friendly warning info
* Fixed the enable coroutine bug in the task process
* Fixed defer function not executed when meeting exception
* Fixed a bug about the global buffer was not copied when the write yield
* Fixed Http proxy (#2195) (#2205)
* Fixed Channel push timeout bug (#2226)
* Fixed Http Client websocket mask (#2206)
* Fixed atomic wait in MacOS (#2198)
* Fixed MySQL client recv huge data more than the max length of a single package (#2208) (57fc849) (76179fa)
* Fixed swoole_get_local_mac not supported on macOS (#2199)
* Fixed php_http_parser bug when meeting the wrong header name (5e91557)
* The default sock property value is -1 (0 is STDIN)
- Remove the short name of Co\Server, This name is reserved for future coroutine services
- All asynchronous classes are marked as deprecated
- Remove Timer maximum time limit
- It is not allowed to fork a process in a coroutine
4.2.9 + Add Coroutine defer feature
* Fixed max_connection can not be bigger than 10k bug (#2134)
* Fixed prepare bug after query 'CALL' (#2132)
* Fixed sendfile EAGAIN bug in MacOS (60023b7)
* Improve onReceive/onPacket callback check
* Use fast call info cache always
* Remove cidmap, cid will never be reused again
* Fixed socket construct failed core dump
* Fixed process wait bug
* Fixed swServer_signal_handler (#2145)
* Fixed typo on Swoole\\MsgQueue::destroy
* Fixed http2 huge headers bug
* Fixed hiredis error msg buffer overflow (#2149)
4.2.8 + Better PHP stack coroutine switcher and Channel implementation
+ GDB Debugging Tool for Coroutine
* MySQL Module Optimization (#2124)
* Postgre Module Optimization (#2069)
* Fixed bugs in MySQL client using Stored Procedure (#2117)
* Fixed HTTP client large file upload BUG
* Fixed bug in the wait process of `co::exec`
* Coroutine nesting detection
4.2.7 + `Server` adds `task_async` config item, supports switching between pure sync mode and async mode, sync mode by default (backward compatibility)
+ Support `gethostbyname` in `Runtime::enableCoroutine`
+ Support `PHP7.3RC5` version
* Fixed low version `GCC` compatibility problem (#2094)
* Fixed ssl timeout bug for `client->recv`
* Fixed `Socks5` proxy not work (#2103)
* Fixed the bug that `connected` property of `Co\Redis` was not updated. (#2104)
* Fixed `taskWait` segment fault (#2098)
* Fixed `Co\Socket` reuse problem
* Fixed a bug in `Process\Pool`
- `Swoole\Serialize` will be forced to close in PHP73 (unsupported temporarily)
4.2.6 + Built-in `hiredis` dependency, no longer needed to compile it separately, refactor `Co\Redis`, more stable
+ Improve the compilation test of the Alpine system
+ Refactor `Co::exec` and functions about file to fix its execution and output issues in some scenarios
* Fixed errors about coroutine switching in multi-level nesting and multiple suspend scenarios
* Fixed connection leaks that may occur when both sides are closed at the same time
* Fixed `channel` bug in blocking scenarios
* Fixed `mysql->prepare` return true (#2080)
* Fixed the reference count problem when use `swoole_table` as an array (#2079)
* Fixed `ssl_host_name` cannot open SNI (#2085)
* Fixed `kqueue` nanosecond conversion problem under MacOS (#2087)
* Fixed all `swoole_object` dangling pointer
* Add a series of scripting tools for the underlying development
4.2.5 * Alpine compatibility (#2071)
* Fixed task_ipc_mode bug (#2072)
* Improve client proxy settings
* Fixed SSL client bug (#2053)
4.2.4 + Refactor HTTP2 client, fix disconnection reconnection problem, fix cookie problem
+ Added coroutine binding detection and friendly error prompts
+ Runtime stream hook adds error_text support
* Increase asynchronous redis callback function type detection
* Fixed http client unable to execute other requests after using the download API
* Fixed `swoole_http_response->detach` cross-function memory error
* Fixed coroutine PDO connection abnormal disconnection
* parameter parsing errors return FALSE (instead of null)
* Fixed `Exception` loss after coroutine switchover
* Fixed `task_max_request` does not work
* Optimize MySQL response packet integrity detection
* Fix coroutine flock deadlock problem
* Fixed the error that the underlying swoole_buffer did not release the object
* Fixed bugs caused by multiple `Content-Length` headers
* Enhanced zval type check, defensive programming
* Fixed the bug of the HTTP coroutine client setData using the object (stream), refactoring the properties parser of the HTTP coroutine
* openssl error cleanup optimization
* `co::fread` optimized for fseek and non-normal file reading
* swoole_server TCP and UDP mode separation
* Fixed the problem caused by passing invalid parameters when creating a server
* Fixed the bug by `addProcess` in BASE mode
* Fixed the problem that the task process uses `reload_async` (asynchronous safe restart feature)
* Improve `package_eof` illegal empty string check
- Remove code for deprecated multi-threaded mode
4.2.3 This version is mostly based on the v4.2.2 made some fixes
+ Add `Co::statvfs` to retrieve file system information
* Fixed non-array property error on swoole_http_response object
* Fixed bad version number, add automated fixing tool
4.2.2 + Task process supports asynchronous and coroutine
+ Refactor `addListener`, now developers can add new service listeners in any order
+ Support mixed server of `http`, `http2`, `websocket`, `tcp`
+ Completed coroutine redis client method parameter definition
+ `Co::readFile` supports reading non-disk files
+ Now static_handler supports more file types and skips files with length 0
* Fixed multipart/form-data in some cases parsing errors
* Fixed the dislocation of sendfile data on MacOS
* Fixed bug where SIGRTMIN processing error caused the log file to fail to reopen
* Fixed a bug where redis-client last error value was not cleared and the next request was incorrect
* Fixed a bug about connecting a connected asynchronous redis coredump
* Fixed MySQL client protocol processing parameter binding NULL bug
* Fixed segment fault caused by file hook, closed the include/require coroutine
* Fixed the socket hook construct error
* Fixed the sleep hook
* Fixed a bug that returned an illegal pointer when reading an unset object property
* Fixed the bug that after event_wait, EG(scope) is not restored in PHP70, causing private properties to be inaccessible
* Alpine dependency compatibility optimization
* Cygwin compatibility optimization
* Support log_level to block warning information
* Distinguish 204 response then skip body processing
* The underlying code is cleaned up, all TSRM macros, PHP5 compatible macros and functions are removed, useless stack allocation and multiple pointers are reduced, FASTZPP is re-enabled to improve parameter parsing performance
* Error tips optimization, error reporting guidelines will be generated when the underlying crash occurs
4.2.1 + This version is based on the previous version and made some fixes.
* Fixed compilation failure caused by no time_nanosleep in some environments
* Fixed loading error in PHP-ZTS version
* Fixed the Bad file descriptor error when using coroutine in dispatch mode 7
* Fixed exit interceptor does not work
* Fixed too long domain name DNS buffer overflow in client
4.2.0 + Add new coroutine hooks, `tcp`, `udp`, `ssl`, `tls`, `sleep`, `usleep`, and file read and write, `mkdir`...etc, be async automatically
+ New ability of the server/client to send the `swoole_websocket_frame` object directly, support any type of `frame` construction, send and receive, support `__toString`
+ Better `AIO`
+ Add the `Process\Pool::getProcess` method
+ Support `--with-hiredis-dir`, `--with-nghttp2-dir` compiling parameters
* Enhanced `send_yield`, automatic retry within the timeout
* Enhanced timer round detection, repaired millisecond-level ultra-short timer execution error
* Enable `TCP_NODELAY` by default, turn off `Nagle algorithm`, reduce latency
* More standardized PECL package
* Re-support the sending of HTTP-header with custom `content-length` of 0
* Fixed an issue that can not access the Private/Protect properties in the class after coroutine yield caused by `EG(scope)` not switched in PHP7.0.x
* Fixed the error opcode and finish status in `websocket_server`
* Fixed the `async_dns_lookup` bug
* Completed the code about `channel.c` overflow space handling
* Fixed the bug of `channel->close`
* Fixed the bug of coroutine `socket->recv_package`
* Repair MySQL Statement->execute does not support null parameters
* Support for identifying `form-data` encoding with a semicolon-separated `boundary`
* Add many high-quality unit tests, greater stability
- Remove useless time wheel algorithm
4.1.2 + Add `socket_hook`
* Fix bugs in nested coroutines
* Fixed variable reference count problem when `exit` in the coroutine
* Coroutine MySQL`query`, `prepare`, `execute` does not time out by default, conforms to the documentation API description
* The MySQL transaction operation of the coroutine is forbidden to use the defer mode, and the developer needs to use it explicitly. The concurrent open transaction can be replaced by `query`.
* Fix the problem of mmap `MAP_FAILED` return value detection
+ Add PECL package verification
4.1.1 + **Support `Redis`, `PDO`, `MySQLi`**, use `Swoole\Runtime::enableCoroutine()` to make them become Async IO by coroutine scheduler
+ **Coroutine tracking**: `Coroutine::listCoroutines()` can list all current coroutines, `Coroutine::getBackTrace($cid)` gets the function call stack of a coroutine
+ Refactoring `Co\Channel` C code to C++, solving unintended consequences of complex scenes and achieving high stability
+ Refactoring `Co\Http\Client` C code to C++ coroutine mode, solving asynchronous timing problems and achieving high stability
+ Support for using `exit` in coroutines and Servers, which will throw a catchable `\Swoole\ExitException` exception.
+ Remove PCRE dependency limits for all iterators (table/connection/coroutine_list)
+ Add the `open_websocket_close_frame` configuration to receive close frames in the onMessage event
+ Remove the `Http\Response->gzip()` method and use the `http_compression` configuration item instead. The bottom layer will automatically determine the client's incoming `Accept-Encoding` to select the appropriate compression method, add Google BR compression support
+ Add `Co\Http\Client->addData()` method to send the data in the memory as the content of the uploaded file.
+ `Solaris` system support
+ Http2 supports `MAX_FRAME_SIZE` framing transmission and `MAX_HEADER_LIST_SIZE` processing. The client adds `isStreamExist` method to detect whether there is a corresponding stream.
+ `swoole_http_response->status` increases the `reason` parameter
* Fixed an issue where unsigned arguments in MySQL prepare used signed values ??to cause numeric overflows
* Fixed an issue with no coroutine in the `onRequest` callback for HTTP2
* Fixed the problem that `tasking_num` became `-1` in some special cases
* Fixed HTTP2-server window-update frame construction error
* Fix all levels of compile warning under all PHP versions
* Compile error will occur when GCC version is less than 4.8
* Fixed MySQL's memory allocation caused by the use of prepare statement without parameter binding
* Fixed old stream memory loss leak when HTTP2 client reconnect
* Fixed wrong package info by version 4.1.0
4.1.0 + **Support `Redis`, `PDO`, `MySQLi`**, use `Swoole\Runtime::enableCoroutine()` to make them become Async IO by coroutine scheduler
+ **Coroutine tracking**: `Coroutine::listCoroutines()` can list all current coroutines, `Coroutine::getBackTrace($cid)` gets the function call stack of a coroutine
+ Refactoring `Co\Channel` C code to C++, solving unintended consequences of complex scenes and achieving high stability
+ Refactoring `Co\Http\Client` C code to C++ coroutine mode, solving asynchronous timing problems and achieving high stability
+ Support for using `exit` in coroutines and Servers, which will throw a catchable `\Swoole\ExitException` exception.
+ Remove PCRE dependency limits for all iterators (table/connection/coroutine_list)
+ Add the `open_websocket_close_frame` configuration to receive close frames in the onMessage event
+ Remove the `Http\Response->gzip()` method and use the `http_compression` configuration item instead. The bottom layer will automatically determine the client's incoming `Accept-Encoding` to select the appropriate compression method, add Google BR compression support
+ Add `Co\Http\Client->addData()` method to send the data in the memory as the content of the uploaded file.
+ `Solaris` system support
+ Http2 supports `MAX_FRAME_SIZE` framing transmission and `MAX_HEADER_LIST_SIZE` processing. The client adds `isStreamExist` method to detect whether there is a corresponding stream.
+ `swoole_http_response->status` increases the `reason` parameter
* Fixed an issue where unsigned arguments in MySQL prepare used signed values ??to cause numeric overflows
* Fixed an issue with no coroutine in the `onRequest` callback for HTTP2
* Fixed the problem that `tasking_num` became `-1` in some special cases
* Fixed HTTP2-server window-update frame construction error
* Fix all levels of compile warning under all PHP versions
* Compile error will occur when GCC version is less than 4.8
* Fixed MySQL's memory allocation caused by the use of prepare statement without parameter binding
* Fixed old stream memory loss leak when HTTP2 client reconnect
4.0.4 + TaskWait support coroutine scheduling now, call "taskwait" in coroutine would be no longer blocked
+ Better Http2 support, we can use "\Swoole\Coroutine\Http2\Client" to structure any GRPC client now
* Fixed a kernel level bug in an infrequent extreme case when using SWOOLE_PROCESS
* Fixed the connection closed when Coroutine WebSocket Client recv timeout
* Fixed PHP class extends without parent calls crash
* Fixed user call "__destruct" brings crash
* Fixed upload filename too long bug
* Fixed HAVE_SOCKETS macro does not exist, including static compiler
* Fixed co::suspend and co::resume assert failed
* Use SSL_pending
* Better signal handler on MacOS
4.0.3 - Fixed `Channel`core dump when high concurrency
- Add `Channel->pop(float $timeout)`, unlimited default
- Remove`Channel->select`
- Fixed call `Co\Client->close`memory error
- `WebSocket\Server` support disconnect with code and reason
- Improve `Coroutine\Http2\Client`:
- Rename `swoole_http2_response` properties to plural form.
- Add Http2 `WINDOW_SIZE_UPDATE` to solve dead lock, unlimited default
- Add `Client->recv(float $timeout)`, unlimited default
- Add `cookies` and `set_cookie_headers` properties
- Fixed all memory errors and invalid properties error
- Fixed core dump when send without recv
4.0.2 - Support ob functions in coroutine
- Better Channel
- Fixed all known bugs about Client
- Fixed all compiler warnings in PHP73
4.0.1 - Added enable_coroutine option
- Added MySQL8 caching_sha2_password supports
- Refactor channel
4.0.0 - Using c stackful coroutine
- Allow to create server in multiple processes
- Fixed issue where http2 server could not send more than 16K data to Chrome browser client
- Added Channel->peek method for peeping data
- Fixed issue where Server->pause/resume could not be used under SWOOLE_PROCESS
- Removed Linux AIO and use thread pool for asynchronous file IO anyway
- Added MySQL stored procedure supports
2.2.0 - Added Co\Socket
- Added Http\Response->detach
- Added Http\Response::create
- Added Http\Response->redirect
- Fixed udp connect no effect
- Fixed http2 server cannot send more than 16k of data
- Fixed Co\Redis connection memory leak bug
- Fixed invalid error log thrown when SOCK_DGRAM type client connection was rejected
1.10.5 - Added Lock::destory
- Added Lock::$errCode
- Fixed RWLock unavailable
- Fixed arg of udp connect no effect
- Added setting window size support for http2 client
2.1.3 - Fixed failed to compile on docker
- Fixed Http\Reponse::write is unavailable
- Fixed ProcessPool crash without onWorkerStart callback
- Fixed failed to compile with --disable-coroutine
- Fixed failed to compile with --enable-coroutinepostgresql on php-7.1
1.10.4 - Fixed failed to compile on docker
- Allow to add timer in master process
- Added configure options for pecl script
2.1.2 - Added PostgreSQL coroutine client (depends on libpg)
- Added Co::readFile
- Added Co::writeFile
- Added swoole_process_pool
- Added swoole_msgqueue
1.10.3 - Added swoole_event_dispatch
- Added swoole_event_isset
- Optimized accept performance
- Added before parameter to swoole_event_cycle
- Added swoole_process::setBlocking
- Added swoole_http_request::getData
1.10.2 - Fixed crash when max_request=1 was set in BASE mode
- Fixed WebSocket client unwrapping when the handshake response and the data frame are in the same transmission unit
- Fixed SSL connection cannot use sendfile
- Fixed lose process due to frequent reload in BASE mode
- Fixed swoole_async_dns_lookup crash when jemalloc is enabled
- Fixed crash when opening opcache.enable_cli=On in PHP7.2
- Modify the error information when the client fails to resolve the domain name
- Process is marked as idle during reload and no longer receives new requests
2.1.1 - Added co::fgets
- Added co::exec
- Added Client::peek
- Added Co\Redis::$connected property
- Added Co\MySQL::$connected property
2.1.0 - Added shortname
- Added channel
- Added non-namespace style API
1.10.1 - Fixed Http2\Server cannot set http header
- Added http_proxy_user and http_proxy_password options
- Added Client::shutdown
- Added WebSocket\server::isEstablished
- Added debug_mode option
- HttpClient compatible with Unity3D
1.10.0 - Update Table::incr and Table::decr support signed integers
- Compatible with PHP-7.2
- Added Event::cycle function
- Fixed Event::del function can not remove the standard input handle problem
- Fixed Task process timer interval is less than the Client receive timeout, causing Client :: recv deadlock problem
- Added automatic analysis of domain names feature, asynchronous client no longer need to add additional code for domain name resolution
- Added ssl_host_name configuration items, used to verify the SSL / TLS host legitimacy
- When dispatch_mode = 3, an error log is printed when all the workers are busy
- Added a port iterator that traverses all connections to a listening port
- Fixed Table memory alignment issues on non-x86 platforms
- Fixed the issue of invalid max_request configuration in BASE mode
- Fixed WebSocket server in some client ping frame with mask data return error
- Fixed an issue where HttpClient uses the HEAD method to respond to content carrying Content-Length causing stuck
- Added STREAM module, Reactor, Worker, Task communication more flexible
- Added request_slowlog_timeout configuration, record slow request log
- Added MySQL asynchronous client support for JSON format
2.0.12 - No longer support PHP5
2.0.11 - Added swoole_mysql::prepare
- Added Coroutine::fread
- Added Coroutine::fwrite
- Added Coroutine::gethostbyname
2.0.10 - Merge branch 1.9
- Improve stability
- First stable version
1.9.23 - Fixed occasional crash bugs of SSL server
1.9.22 - Fixed MacOS occasional death cycle problems
- Added Async::exec
- Added tsl_host_name option
1.9.21 - Added Atomic\long, support 64-bit signed long integer
- Optimized the underlying GlobalMemory implementation, support the creation of an unlimited number of atoms, locks, tables
- Prohibit serialization of Swoole module object
- Fixed Http\Client download method fourth argument is invalid
- Fixed FreeBSD platform compiler error report
- Fixed sendfile on the MacOS platform there is a 5 second delay problem
- Added Process::setTimeout
2.0.9 - Merge branch 1.9
- Added Server::taskCo
- Added Coroutine::sleep
1.9.20 - Fixed 32-bit system compilation failed
- Fixed not available on PHP5
1.9.19 - Fixed worker process crash when the Channel::push exceeded 8K and failed to create temporary file
- Fixed MacOS event of shutdown cannot be executed
- Automatically create the task_tmpdir and upload_tmp_dir directories
- Fixed the SSL server to set the ciphers or ecdh_curve problems that cause the crash
- Optimize the performance of the Server::bind method using a spin lock
- Added the reload_async option to control the asynchronous reboot of the switch
- Added the tcp_fastopen option to turn on TCP fast handshake
1.9.18 - Fixed process::signal parent/child process repeatedly registers the same signal that causes the crash
- Optimize EOF protocol logic to reduce 64K stack memory requirements
- Fixed the client to set the HTTP_PROXY agent does not work properly
- Fixed asynchronous reloading a certain probability of missing process problems
- Allow dispatch_func to pass in PHP functions
- Fixed defer interface can not perform in the onWorkerStart callback
- Fixed EOF sync client has received an EAGIAN error when receiving data continuously
2.0.8 - Merge branch 1.9
1.9.17 - Refactor the worker process reload feature
- Added document_root and enable_static_handler option
- Update Server::send method, SSL connections can use sendfile
- Added 27 unit test scripts
1.9.16 - Updated server listen fail to throw Swoole\Exception exception instead of fatal error
- Added Swoole\Async::set log_file option
- Updated the swSocket_bind error log mode and accept the log_level control
- Fixd deadlock when sending large packets in UserProcess
- Added 16 unit test scripts
1.9.15 - Added MySQL client support for transaction processing
- Added static compilation support
- Added MySQL connection timeout support
- Added Redis connection timeout support
- Added Redis password and database options
- Added Atomic->wait/wakeup function, you can use the atomic count to achieve notification and wait function
- Fixed Redis\Server received more than 8K request crashes when the request
- Added 170 unit test scripts
1.9.14 - Update HttpClient, when the connection is overtime or when the server is reset, the callback is not completed
- Update HttpClient, the underlying increase request timeout mechanism
- Update the bottom of the client support mqtt agreement
- Fixed WebSocket server custom handshake method more than the header
- Fixed onTask memory leak
- Fixed HttpServer special circumstances the release of the problem of the crash occurred
- Fixed WebSocket::unpack Passing an empty string causes a problem with parsing errors
1.9.13 - Fixed WebSocket::unpack memory leak
- Fixed server accept blocking in MacOS platform
1.9.12 - Allow the WebSocket client to send empty packets to the server
- Added the callback function cache, reduce the callback function CPU consumption
- Fixed WebSocket client memory leak
- Fixed compiler error when have not SSE instruction
1.9.11 - Fixed WebSocket server onOpen callback memory leak
- Added heartbeat detection support time wheel algorithm
- Added length parameter support for sendfile API
- Added connection timeout supports for asynchronous client
- Optimized performance, reduce branch prediction failure rate
1.9.10 - Fixed compile error with enable-ringbuffer
- Fixed unix socket client cannot connect to server
- Fxied swoole_client::close crash with SWOOLE_KEEP flag on PHP-FPM
1.9.9 - Fixed a problem with the rectifier overflow of the DNS resolver request ID
- Update swoole_table::get method, increase the parameters to support only the value of a field
- Update getClientInfo return value from_id entry to reactor_id
- Fixed the Http2 client POST data when the protocol is faulty
- Fixed swoole_async_dns_lookup target host IP contains 0 when the return value is wrong
- Fixed crash when tcmalloc and jemalloc are enabled
2.0.7 - Added Coroutine::create function, allows user to create coroutine
- Fixed HttpClient crash
1.9.8 - Fix some compilation errors
1.9.7 - Added support for systemd.socket
- Added swoole\http2\client
- Added client support for http-proxy
- Added the swoole_process::close parameter, allowing only one of the pipes to be closed
- Fixed MySQL client crash when the low version gcc is compiled
- Fixed the crash in the BASE mode shutdown
- Fixed openssl-1.1 configuration detection error problem
- Fixed open_eof_split after enabling BASE mode to turn off connections in the onReceive callback function
- Fixed the problem with the Redis \ Server :: format function SET and MAP formatting errors
- Fixed a problem that caused a crash when a string type variable was passed directly when swoole.fast_serialize was enabled
- Update The reactorId variable in the onClose callback is set to -1 when the server actively shuts down the connection
1.9.6 - Added swoole_mysql::escape method to escape special characters in SQL statements
- Added support for openssl-1.1
- Fixed timer crash when more than 10,000 timers were added
- Added swoole_serialize module, PHP7 under high performance serialization library
- Fixed swoole_client->enableSSL method ssl_cert_file and ssl_key_file invalid parameters
- Added swoole_http_server support for POST multi-level KEY
- Fixed listening on UDP port setting onPacket invalid issue
2.0.6 - Fixed http client and redis client conflicts
- Fixed the coroutine client cannot use the SplQueue on PHP5
1.9.5 - Fixed taskWaitMulti special case of file descriptor leak problem
- Added pid_file option to write the master PID to file
- Added listen random port support, OS will automatically be assigned an available port
- Removed DNS cache, removed swoole_clear_dns_cache function
- Added use_async_resolver option to enable real async-io DNS lookup
1.9.4 - Fixed WebSocket server default onRequest method memory leak problem
- Fixed the problem of missing zlib library compilation failures
- Added Client->reuseCount property to query the number of multiplexed sockets
2.0.5 - Added native coroutine
- Added Swoole\Coroutine\Client
- Added Swoole\Coroutine\Http\Client
- Added Swoole\Coroutine\MySQL
- Added Swoole\Coroutine\Redis
- Fixed compile failure with ZTS
- The minimum version requirement upgrade to 5.5
2.0.4 - Added native coroutine
- Added Swoole\Coroutine\Client
- Added Swoole\Coroutine\Http\Client
- Added Swoole\Coroutine\MySQL
- Added Swoole\Coroutine\Redis
1.9.3 - Added extension function args info
- Added package_length_func option
- Added http_client download method
- Fixed issue#965
- Fixed issue#966
- Fixed issue#967
1.9.2 - Fixed zend_mm_heap corrupted on PHP7
- Fixed Async::writeFile parameter FILE_APPEND is invalid on MacOS
- Disabling Async::writeFile Use the FILE_APPEND parameter in LinuxAIO mode
- Added websocket_subprotocol option WebSocket server supports setting Sec-WebSocket-Protocol
- Fixed CentOS 4.3 or lower operating system does not exist O_CLOEXEC causes compilation to fail
- Fixed server tasking_num overflow bugs
- Added ucwords parameter to response header method
1.9.1 - Fixed server cannot shutdown when using addProcess
- Fixed Async::write function does not set the callback function to crash
- Fixed a problem with the Table Iterator missing data
- Added Async::writeFile FILE_APPEND option supports
- Added file lock to Async::write/read function
- Refactor the implementation of the Async::write function, using O_APPEND
- Refactor reopen the reopen log file feature
- Fixed taskWaitMulti unable to return to the results of the successful implementation of the task after a timeout
- Timers use monotonic time to solve the system time to modify the problem caused by timer confusion
1.9.0 - Added Swoole\Redis\Server, redis compatible protocol server framework
- Added Swoole\Mmap, high-performance disk read and write function
- Added Swoole\Client::pipe method
- Added onBufferEmpty and onBufferFull event callback for Swoole\Server
- Added buffer_high_watermark and buffer_low_watermark option for Swoole\Server
- Added swoole_clear_dns_cache function
- Added Swoole\Channel, high performance shared memory queue
- Fixed redis client type method could not return a string
- Fixed an issue when the sync client length protocol package_max_length was invalid
- Fixed low-level version of gcc running under the long-term crash happened
- Fixed invalid websocket_mask for asynchronous WebSocket client
- Fixed a problem where the MySQL client crashed accidentally when there were too many records
- Fixed Mac platform task more than 8K to create a temporary file failed to lead to the problem of undeliverable tasks
- Fixed taskWaitMulti When the process returns more than 8K receive timeout problem
- Fixed atmoic add and sub return value exists data synchronization problems
1.8.13 - Fixed WebSocket\Server automatically merge the incomplete data frame exists security vulnerabilities
- Added the upload_tmp_dir option to set the Http\Server upload file temporary directory
- Added Server->sendMessage automatic stringing function, and now sendMessage PHP variables can be sent to any other work process
- Added Process::alarm high-precision timer
- Added a bug where the protocol length function crashed when the connection was closed
- Fixed swoole_select function in PHP7 can not modify the reference array problem
1.8.12 - Fixed Table Errors caused by iterator errors when deleting elements while traversing data
- Added Http\Client new option websocket_mask controls websocket client enable mask
- Repair Swoole \ Server in BASE mode can not use task_ipc_mode = 3 configuration
- Optimize the performance of Http\Server response body gzip compression
- Fixed Timer::after can only be executed once in the task process
- Added automatic splicing incomplete data frame for WebSocket\Server
- Remove the enable_reuse_port option
- Added Swoole\Async namespace class style api
- Fixed Http\Server lisnten UDP port cannot use onReceive callback function
1.8.11 - Added new package_length_type C(unsigned 8bit)/c(signed 8bit)
- Added package_length_func option, you can use the C/C++ function to parse the packet length
- Added SIGRTMIN signal handler, used to reopen the log file
- Fixed server crash on Cygwin environment
1.8.10 - Fixed Swoole\Http\Client crash when do close connection in the callback function
- Fixed Swoole\Http\Server cannot support more than 1024 concurrent
1.8.9 - Added namespace class alias
- Added Swoole\Http\Client->addFile interface, support upload file
- Added Swoole\Event namespace and class styles
- Added Swoole\Http\Client no ContentLength response
- Added --with-openssl compiler option, can specify the path of the OpenSSL Library
- Fixed Swoole\MySQL memory leak on PHP7
- Fixed Swoole\Redis memory leak on PHP7
- Fixed Swoole\Http\Client memory leak on PHP7
- Fixed Swoole\Http\Server crash when uploading files on PHP7
1.8.8 - Added Swoole\Server\Port->getSocket
- Added Swoole\Server->getClientInfo()['close_errno'] property
- Added Swoole\Event namespace and class styles
- Added Swoole\MySQL character set support
- Added Swoole\Server->taskWaitMulti can perform multiple tasks concurrently
- Added Swoole\Client->getPeerCert method
- Added Swoole\Client->pause and Swoole\Client->resume
- Fixed Swoole\Server->taskwait cannot use in BASE mode
- Fixed Swoole\MySQL client crash when receive more than 250 field query statement
- Fixed Swoole\Server->task third parameter passed Callback Crash at PHP7
- Fixed Swoole\Http\Request->files crash on PHP7 when externally referenced
1.8.7 - Fixed Swoole\Http\Server on PHP7 crash (zdata release request data memory problems)
- Fixed Swoole\Http\Client crash when no have header setting
- Fixed Swoole\MySQL parse unixsocket type host address fail
- Fixed Swoole\Http\Client crash below the Linux-2.6.18 version of the kernel
- Fixed Swoole\MySQL nested callback crash problem on PHP7
- Update Swoole\Server maximum listening port number to 60,000
- Update Swoole\Server main thread use epoll or kqueue
- Fixed swoole_async_dns_lookup crash when hit cache
- Added Swoole\Timer::exists
1.8.6 - Added `swoole_mysql` real async mysql client
- Fixed swoole_client/swoole_http_client/swoole_redis memory leak and crash bug on PHP7
- Remove gcc_aio.c
- Remove swoole_mysqli_get_socket and swoole_mysql_query
- Remove swoole_http_server->setGlobal
- Added swoole_async_dns_lookup result cache
- Optimize websocket server performance
- Added swoole_server->task complete callback parameter
1.8.5 - Fixed swoole_mysql_query insert_id error
- Fixed swoole_websocket_server crash when receiving less than 4 bytes of data
- Added bigint ID support for swoole_mysql_query
- Fixed sync Swoole\Client memory leaks
- Fixed Swoole\Http\Client crash when the connection is closed
1.8.4 - Fixed Swoole\Redis callback function memory leak bugs
- Fixed swoole_mysql_queue function memory leak bugs
- Fixed Swoole\Http\Client memory leak bugs
- Fixed issue #585
- Fixed issue #590
- Added unixsock support for async client
- Added high-precision time for Swoole\Http\Request
1.8.3 - Added swoole_server->getLastError method for getting the last error code
- Added form-data supports for Http2 protocol
- Added COOKIE support for Http2 protocol
- Added SSL/TLS encryption support for http client
- Fixed issue #527
- Fixed issue #553
- Fixed crash when the number of CPU cores than is set reactor_num
- Fixed swoole_client callback function memory leak
- Added support for asynchronous full reload of server security
1.8.2 - Added http2 supports for swoole_http_server
- Added swoole_server->stop method used to stop the worker process
- Added log_level option for swoole_server settings
- Fixed swoole_websocket_server receives data over the issue 64K crashes
- Added multi-port monitor is not set callback function causes the program to crash
- Enhance the SSL/TLS encrypted safety level, now used by default TLS1.2/ECDHA_RSA encryption algorithm
- Fixed onFinish event callbacks memory leak problem
- Fixed the problem task finish can not be used under BASE mode
1.8.1 - Added psr-4 style namespace classes alias
- Added swoole_server->protect methods used to protect the connection will not close by heartbeat thread
- Added swoole_websocker_server::pack and swoole_websocker_server::unpack static method
- Added redis subscribe and publish messages supports
- Added swoole_http_client for gzip content compression support
- Added swoole_client->reuse property
- Fixed async client incidental core dump
- Fixed async client memory leak
- Fixed compile failed with enable-openssl on MacOS
1.8.0 - Fixed swoole_process::signal core dump on PHP7
- Refactor after/tick timer
- Refactor swoole_websocket_server
- Added async redis client
- Added async http/websocket client
- Added swoole_client->reuse property
- Added swoole_server->defer/swoole_event_defer
- Added support for multi-port hybrid protocol
- Added configure option for tcmalloc and jemalloc
- Remove swoole_server->addtimer/swoole_timer_add/swoole_timer_del
- Remove swoole_server->onTimer event callback
- Remove swoole_server->handler
- Update lish.h to version-1.9.9
1.7.22 - Fixed memory leak in PHP7
- Fixed core dump in PHP7
- Added swoole_mysql_query
- Fixed swoole_table->del damage the memory
- Added swoole_websocket_server->exist
- Added swoole_server ssl_client_cert_file settings
- Fixed timer exec_time overflow cause stop
1.7.21 - Fixed memory leak swoole_client synchronous mode occurs when the server closes
- Fixed POST/Upload problem can not handle more than 8K
- Added swoole_http_response->sendfile method for sending large files
- Fixed swoole_client core dump when enable SSL/TLS encrypted
- Added swoole_server->getSocket/swoole_client->getSocket
- Fixed UDP large package in question Worker process occurs dispatch_mode = 1/3 deadlock
- Added swoole_client->sleep/wakeup method for suspend/resume data reception event
- Fixed UDP large package data is abnormal
1.7.20 - Added swoole_http_server HTTP DELETE entity supports
- Added swoole_client support for SSL/TLS tunnel encryption
- Optimized RINIT/RSHUTDOWN
- Fixed the problem of coredump when swoole_websocket_server is not set up onRequest
- Added swoole_server->getClientInfo/getClientList alias
- Fixed swoole_server->finish cannot use in BASE mode
- Added swoole_client ssl certificate supports
- Fixed swoole_http_server memory leak
1.7.19 - Added swoole_atomic module, support for atomic integer operations
- Fixed timer in the system can not recover after the resumption of the operation
- Fixed ssl_server cannot send more than 30K large packages in a slow network
- Added supports for UDP/UDP6/UNIX_DGRAM big packages(64K)
- Fixed addtimer/tick timer can't be used in BASE mode
- Added addProcess in SWOOLE_BASE mode
- Fixed SWOOLE_KEEP core dump
1.7.18 - Added onPacket event callback function
- Added PHP7 support
- Fixed swoole_http_response->header memory leak
- Added swoole_table signed integer support
- Added REUSEPORT support
- Fixed woole_client and swoole_timer memory leak
- Added swoole_server->exist function
1.7.17 - Fixed async swoole_client send data incomplete
- Removed task_dispatch_mode server configuration
- Added pipe_buffer_size server configuration
- Pipeline memory buffer default size is adjusted to 32M
- Http Server Header adjust the maximum length of 128 to 8192
- Fixed swoole_process->pop cannot use
- Fixed taskwait error in MacOS and CygWin
- Added swoole_table->exist
1.7.16 - Fixed swoole_server->addtimer and tick timer conflict
- Added server statistics items request_count and worker_request_count
- Added server connections iterator, foreach traverse server can use all the connections
- Optimize dispatch_mode = 3 model to enhance the efficiency of task assignment
- Added multipart-form http server and upload files support
- Added http server requests query_string
- Fixed invalid parameter problem task_max_request
1.7.15 - Fixed swoole_client waitall parameters failures
- Fixed swoole_table dead loop BUG
- Disable swoole_websocket_server->send method
- Added swoole_table->incr/decr methods
- Added http server gzip compression supports
- Added swoole_server open_eof_split configuration
1.7.14 - Update websocket server onOpen callback params
- Update websocket server onMessage callback params
- Added swoole_server->tick/swoole_timer_tick function
- Fixed onReceive data merge failure
- Added http server gzip compression supports
- Update http server allows sending empty body
1.7.13 - Update server session_list resized to 1M
- Update connection_info from_fd, from_port rename to server_fd, server_port
- Http server performance optimization
- WebSocket server performance optimization
- Added swoole_client->getpeername
- Added swoole_client->getsockname
- Fixed accept dead loop when server have too many connection
- Fixed sequence of onConnect/onReceive events disorder
1.7.12 - Fixed swoole_server tcp buffer error
- Fixed wrong error log
1.7.11 - Fixed udp server called connection_info wrong
- Fixed temporary files task disk space does not release
- Fixed WebSocket onOpen event callback core dump
- Fixed cannot use sendMessage in the task process
- Fixed Websocket server Sec-WebSocket-Accept handshake failed
- Fixed HttpServer in turn the KeepAlive continuous POST data coredump
- Fixed MacOS/FreeBSD error ENOBUFF occurred in a large number of concurrent
- Added HttpServer chunk transmission support
- Added PCRE detection
1.7.10 - Fixed udp server after the reload cycle of death BUG
- Fixed http server POST request segment fault error
- Added non-blocking settings for swoole_process::wait
- Fixed pecl script cannot use
- Fixed swoole_server->sendMessage to fail
- Added swoole_websocket_server
- Added swoole_server->sendto
- Optimization performance for http_server
- Optimization performance for swoole_client and swoole_event
- Added ARM platform support
1.7.9 - Added websocket protocol support
- Added swoole_process::signal
- Added swoole_server->addProcess
- Added swoole_process::name
- Added swoole_server::listen
- Added swoole_server::sendMessage and onPipeMessage event
- Added swoole_event_write
- Added swoole_process->close
- Added swoole_server user/group setting
- Added swoole_server task/finish automatic packing
1.7.8 - Fixed swoole_http_server::on no implementation parent class methods
- Fixed cannot read cookie in swoole_http_server
- Added swoole_http_server support to POST RawContent
- swoole_timer_after interface can pass a user parameter
- swoole_client->recv and onReceive zero copy
- Fixed swoole_table->set cannot be set more than 64K string
- Fixed open_length_check connection memory buffer is not reset bug
- Added dispatch_mode=4/5, dispatch data by client ip and uid
- Event callback function exception error level changed from E_WARNING to E_ERROR
1.7.7 - Added swoole_http_server
- Added swoole_server->after and swoole_timer_after
- Fixed all known issues
1.7.6 - Fixed all known issues
1.7.5 - Added swoole_client->sendfile()
- Added swoole_table
- Remove onMasterConnect/onMasterClose
- Added pipe output buffer
- TCP short connection have 50% performance improvement
1.7.4 - Task process support timer
- Repair UDP error BUG
- Add SSL-server support
- Reload is effective for task_worker.
- When the pipe is filled with poll is waiting for the write, rather than packet loss
- Increase the clang compiler support
- Repair shutdown task_worker and manager abnormal stop
1.7.3 - Fixed pipe_worker zero
- Fixed serv->connect_count wrong
- Fixed length_check dispatch error
- Optimization of large size response packet
1.7.2 - Fixed udp sendto error
- Fixed heartbeat no close connection
- Added swoole_process module
- Added swoole_server::task large package
- Added swoole_server task worker use message queue
- Added messge queue ipc move to swoole_server::set
1.7.1 - Check close fd is not timer_fd
- TCP_DEFER_ACCEPT option
- socket LINGER option
- Fixed eof_check memory error
- Added swoole_event_set
- Added swoole_client out_buffer
- Added socket linger option
- Fixed the swoole_server->close destroy out_buffer bug
- Using php_error_docref
- Fixed swoole_async_dns_lookup warning
1.7.0 - Fixed compile error.
1.6.12 - Added connection out_buffer
- Added async file read/write
- Added async dns lookup
- Added long tcp connection
- Added client timer
- Added swoole_server->sendfile
- Added signalfd usage
- Fixed some bugs
1.6.11 - Disable by default async_mysql
- Disable by default sockets
- Added event onWorkerError
- Added event onWorkerStart for task_worker
- swoole_server->task can assign worker_id
- swoole_server->set() save params to swoole_server::$setting
- swoole_client->send will check data length
- swoole_server->connection_info for udp
1.6.10 - Enabled by default async_mysql
- Add tcp heartbeat mechanism
- UDP send no require from_id
- swoole_client on::Receive and on::Close no need to call recv/close
- Add last_time and connect_time to tcp connection_info
- rebuild data_buffer
1.6.9 - use "pecl package"
1.6.8 - Fix all gcc wanning
- support pecl install
- new function swoole_server_taskwait
- remove *.lo files
1.6.7 - First version for pecl.net

Return

PRIVACY POLICY  |  CREDITS
Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Fri Jan 25 00:05:01 2019 UTC
Bandwidth and hardware provided by: pair Networks