You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Consistent with PHP official, no longer supports PHP7.0 (@matyhtf)
Remove the Serialize module, which is maintained in a separate ext-serialize extension. Reason: Due to frequent changes to the PHP kernel, stability cannot be guaranteed
Remove the PostgreSQL module and maintain it in a separate ext-postgresql extension. Reason: PostgreSQL uses asynchronous ways in the kernel and lacks the necessary unit tests to guarantee quality
Runtime::enableCoroutine is no longer automatically compatible with the internal and external environment of the Coroutine. Once enabled, all blocking operations must be called in the Coroutine (@matyhtf)
Due to the introduction of the new Coroutine\MySQL client driver, the underlying design is more standardized, but there are some small downward incompatible changes
Coroutine\MySQL->fetch/nextResult is optimized for on-demand reads, which will trigger IO scheduling
When the defer attribute is on, the request of statement needs to use statement->recv to receive the response
When the defer/fetch_mode feature is enabled, if there is unreceived data, a new request will be banned
Unlike asynchronous, the connected attribute is no longer updated based on events in real-time (It's not reliable) but is updated after the IO operation fails
Coroutine\Http\Client->set_cookie_headers no longer have key names (#2664) (@twose)
Deprecated content
The Buffer module will be discarded. Reason: It is highly replaceable and has low usage. It can be replaced by PHP string or fopen("memory")
The Lock module will be discarded. Reason for discarding: There may be problems with locking in the Coroutine. You can use Chan to implement the Lock of the Coroutine version
Since async stream_socket_pair is introduced, it is recommended to enable the hook by flag SWOOLE_HOOK_STREAM_FUNCTION instead of SWOOLE_HOOK_STREAM_SELECT
New features
Added Library, using pure PHP to write kernel functions instead of C/C++, providing the following features
Added high quality PHP module Coroutine\WaitGroup (@twose)
Use the PHP code to implement the CURL hook, one-click to make the CURL non-blocking, currently the experimental feature, you need to call Runtime::enableCoroutine(SWOOLE_HOOK_CURL) to open (@matyhtf) (@Yurunsoft)
Use PHP code to implement exec/shell_exec of Coroutine version (#2657) (@Yurunsoft)
When RuntimeHook is turned on, the function array_walk, array_walk_recursive will be replaced by the version of Swoole, which will solve the problem that the native function cannot be reentrant, but it will not be able to traverse object (@matyhtf) (@twose)
Added a new Coroutine Preemptive Scheduler to prevent the Coroutine from taking too long CPU time to cause other Coroutine to starve. Open the swoole.enable_preemptive_scheduler = On by php.ini. For details, see preemptive_scheduler (@shiguangqi)
Added Timer::list() to get Timer\Iterator, which can traverse all timers, Timer\clearAll clears all timers, Timer\info(int $id) gets timer information, Timer::stats() gets the global timer status (#2498) (@twose)
Added two methods getOption and setOption for Coroutine\Socket (9d13c29) (@matyhtf)
Added $master_pid property and shutdown method to Process\Pool (a1d6eaa) (@matyhtf)
Added the 4th parameter of the constructor of Process\Pool, when true, the underlying layer will automatically create the Coroutine in the onWorkerStart callback (8ceb32c) (@matyhtf)
Support non-blocking stream_socket_pair in Runtime hook (#2546) (@matyhtf)
Added static_handler_locations setting of Http\Server to set static file path (@matyhtf)
Added Coroutine\Http\Client->setBasciAuth method to automatically send Authorization header (#2542) (@hongbshi)
New Coroutine\MySQL\Client driver (#2538) (@twose)
The underlying programming mode using C++ and Coroutine (sync writing, async performance)
Support SSL connection (configure ['ssl' => true] when connect)
Support request with large data (unlimited)
Support response with large data (unlimited)
Support fetch to read by line (now fetch is read on demand, data without fetch does not consume user memory) (#2106)
Support nextResult read on demand (ibid)
Optimized protocol parser
date related type decimal precision support
Error code and information are consistent with PDO/mysqli
Coroutine\Redis compatibility mode, enabled by $redis->set(['compatibility_mode' => true]), which can make the result of hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore consistent with phpredis (#2529) (@caohao-php)
Now 100K Coroutine are allowed to exist at the same time by default (c69d320) (@twose)
Support bailout (can exit the process correctly when a fatal error occurs in the Coroutine) (#2579) (@twose)
Server can display a friendly 400/404/503 when error occurred (@matyhtf) (f3f2be9)
Server enable reload_async and send_yield by default (#2555) (9d4a4c4) (@matyhtf)
Server->onFinish callback is in Coroutine (@twose)
Coroutine\Http\Client enable websocket_mask by default
(c02f4f8) (@twose)
Scheduling operation of Channel outside the Coroutine is no longer allowed (519b604) (@twose)
WebSocket\Server will close the connection when the handshake fails (#2510) (@twose)
Under the Linux, the dead parent process will automatically send a signal to kill the child process (4b833a3) (@matyhtf)
Memory optimization of Socket->recv (642a355) (@twose)
Floating point calculation optimization (#2572) (@tangl163)
All built-in classes prohibit cloning/serializing/unseting-declared-properties (f9c974b) (@twose)
Server->bind will generate a warning and return false when uid is more than UINT32_MAX