Login  |  Packages  |  Support  |  Bugs


Changelog for swoole
Release What has changed?
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)

+ 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 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

* 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
- 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
- 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


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