-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathCHANGELOG
More file actions
127 lines (108 loc) · 8.89 KB
/
CHANGELOG
File metadata and controls
127 lines (108 loc) · 8.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# 26.2.0
## New Features
. PHP 8.5 support
. PHP native Fiber context backend for coroutines: new coroutine context backend using PHP's native zend_fiber API instead of Boost ASM or ucontext. Enables proper integration with xdebug, profilers, and fiber-aware extensions. Configurable at runtime via `Co::set(['use_fiber_context' => true])` or INI `openswoole.use_fiber_context=On`
. Xdebug support: xdebug step debugging now works correctly inside coroutines when fiber context is enabled. Removed the legacy "extremely dangerous" warning
. Runtime reactor type selection: select the event reactor backend at runtime via `Co::set(['reactor_type' => OPENSWOOLE_IO_URING])`. New constants: OPENSWOOLE_EPOLL, OPENSWOOLE_KQUEUE, OPENSWOOLE_POLL, OPENSWOOLE_SELECT, OPENSWOOLE_IO_URING
. io_uring reactor backend: new event reactor using Linux io_uring with IORING_OP_POLL_ADD as a drop-in replacement for epoll. Enable with `--enable-io-uring` (requires liburing). Supports multishot poll on kernel 5.13+ with automatic fallback on older kernels
. io_uring async file I/O engine: dedicated io_uring ring for asynchronous file operations (open, read, write, fstat, fsync, unlink, rename, mkdir, rmdir), replacing the thread pool. Unsupported operations gracefully fall back to the thread pool
. Event loop lag metrics: real-time event loop lag monitoring via `$server->stats()`. Exposes `event_loop_lag_ms`, `event_loop_lag_max_ms`, and `event_loop_lag_avg_ms` per worker, task worker (when coroutine-enabled), and reactor thread (process mode). Useful for detecting blocking operations that stall the event loop
. Coroutine-safe exit() support: intercepts exit() calls inside coroutines on PHP 8.4+ (where exit changed from opcode to function) and throws openswoole_exit_exception instead
. Backward compatibility constant aliases
. Migrate HTTP parser to llhttp: replaces the custom openswoole_http_parser with llhttp parser for improved standards compliance and performance
## Bug Fixes
. Fix reflection issues and scope leaks (#284): OSW_FUNCTION_ALIAS caused global functions to appear as class methods with corrupted return types in Reflection. Replaced with proper PHP_FE/PHP_FALIAS entries
. Fix file I/O hanging under io_uring: race condition where eventfd notification could be lost between draining and re-arming single-shot POLL_ADD. Added reactor end-of-loop callback and timeout CQE filtering
. Fix file lock bug: non-blocking flock (LOCK_NB) now properly checks in-process coroutine lock state before the system flock() call
. Fix CPU affinity compile check: add missing _GNU_SOURCE define before sched.h
. Fix futex compile check: add missing _GNU_SOURCE define before linux/futex.h
## Refactoring
. Namespace normalization: openswoole_*, updated internal references and test directories
. Removed compile-time guards from reactor type PHP constants; runtime validation handles unsupported backends
. Removed PHP < 8.0 compatibility code
. Dropped PHP 8.2 support
#
. Fix postgres client bugs @mrVrAlex
# 22.0.0
. Rename `co\run` to be `co::run`
. Security update: Remove embedded PHP codes, hot code execution with eval and remove `ini` option `enable_library`
. Added server Constants class: OpenSwoole\Constant
. Use \OpenSwoole as the main namespace, although \Swoole is still supported
. Pre-check server options
. Security update: New server option `enable_server_token`, disabled by default
. Built-in Psr7 API support added
. Boost ASM library upgrade
. New Psr API: $server->setHandler(\Psr\Http\Server\RequestHandlerInterface $handler)
. New Psr API: $server->handle(callable $callback)
. Redis Server API: $server->setHandler() -> $server->addCommand()
. Redis Server API: $server->getHandler() -> $server->getCommand()
. Disable sockets_*, exec, shell_exec, `gethostbyname` coroutines hook by default, remove HOOK_BLOCKING_FUNCTION and HOOK_SOCKETS in HOOK_ALL; Enable them explicitly if they are used
. Remove deprecated custom coroutine MySQL client, prefer the hooked native coroutine MySQL client
. Remove deprecated custom coroutine Redis client, prefer the hooked native coroutine Redis client
. Remove deprecated experimental coroutine HTTP server
. Remove deprecated experimental Redis protocol server
. Remove deprecated function `swoole_timer_set()` and `Timer->set()`
. Remove deprecated function `swoole_event_rshutdown`
. Remove deprecated function `Swoole\Runtime::fread`, `Swoole\Runtime::fwrite`, `Swoole\Runtime::fgets`
. Remove deprecated function `Coroutine::suspend`, use `Coroutine::yield`
. Remove deprecated function `Coroutine::getuid`, use `Coroutine::getCid`
. Remove deprecated function `Coroutine::listCoroutines`, use `Coroutine::list`
. Remove deprecated function `Table::exist`, use `Table::exists`
. Remove deprecated function `Table::delete`, use `Table::del`
. Remove deprecated function `Server->connection_info()`, use `Server->getClientInfo()`
. Remove deprecated function `Server->connection_list()`, use `Server->getClientList()`
. Remove deprecated function `Server->exist`, use `Server->exists`
. Move global constants under namespace: SWOOLE_CHANNEL_OK -> `OpenSwoole\Coroutine\Channel::CHANNEL_OK`, SWOOLE_CHANNEL_TIMEOUT -> `OpenSwoole\Coroutine\Channel::CHANNEL_TIMEOUT`, SWOOLE_CHANNEL_CLOSED -> `OpenSwoole\Coroutine\Channel::CHANNEL_CLOSED`...
. Move global constants under namespace: SWOOLE_DEFAULT_MAX_CORO_NUM -> `OpenSwoole\Coroutine::DEFAULT_MAX_CORO_NUM`...
. Remove `$server->getLastError()`, use `OpenSwoole\Util::getLastErrorCode()`
. Remove `$process->name()`, use `OpenSwoole\Util::setProcessName()`
. New Util API class: added `OpenSwoole\Util` class
. Remove option `swoole.use_shortname`, remove `Co\*` alias. `go`, `chan`, `defer`, `co::*` are available by default
. Remove `swoole_async_dns_lookup_coro`, use `OpenSwoole\Coroutine::dnsLookup` or `OpenSwoole\Coroutine\System::dnsLookup`; remove `swoole_async_set`, use `OpenSwoole\Until::setAio([])` or `$server->set([])` for `aio` options;
. Rename PHP `ini` options from `swoole.*` to be `openswoole.*`
. Remove `swoole_clear_dns_cache`, use OpenSwoole\Coroutine::clearDNSCache` or `OpenSwoole\Coroutine\System::clearDNSCache`
. Remove custom unserialize functions: `swoole_substr_unserialize` and `swoole_substr_unserialize`
. Remove `swoole_client_select` and `swoole_select`, use `OpenSwoole\Client::select`
. Remove `swoole_last_error`, use `OpenSwoole\Util::getLastErrorCode`
. `OpenSwoole\Event::wait();` should be added explicitly to wait for all the IO events
. Use `\OpenSwoole\Server::SIMPLE_MODE` and `\OpenSwoole\Server::POOL_MODE` at server structure config
. Fix: ignore user set illegal HTTP header at server
. Fix: ignore user set encoding header at client if it is not supported
. Remove hard requirements and links of json and remove compile flag `--enable-swoole-json`
. Rename compile flag `--enable-swoole-curl` to be `--enable-hook-curl`
. Fix convert double sec to long microseconds in hooked usleep by @shandyDev
# 4.12.1
. Bug fixed: PDO pool client for Postgres
. Compatible with PHP 8.2.0 (PHP-8.2.0)
# 4.12.0
. New server option: `enable_server_token`, disable by default
. Compatible with PHP 8.2 latest changes (PHP-8.2-RC3)
. Fix: ignore user set encoding if it is not supported
. Fix: Remove illegal http header
. Fix convert double sec to long microseconds in hooked usleep by @shandyDev
# 4.11.1
. Fix postgres client metaData api bugs
. Fix cookie parsing bug causing cookie errors
. Fix memory leak in swoole_stream_select
. Fix compatible issues with old libcurl on centos 7
. Fix compatible issues for PHP 8.0 and Fedora, Centos 7
# 4.11.0
. HTTP2 server: allow HTTP2 client and server to set custom HTTP2 settings: http2_header_table_size, http2_initial_window_size, http2_max_concurrent_streams, http2_max_frame_size, http2_max_header_list_size
. Support static compile
. New feature: support http_index_files at HTTP2 server
. CI: Remove PHP7.2/7.3 support as they are not supported by the PHP team
. Bug fixed: Fix HTTP2 client and respect max_concurrent_streams settings
. HTTP2: Update HTTP2 default max concurrent streams per connection to be 1280
. Bug fixed: Respect server side settings at HTTP2 client
. Optimize signal-driven timer code (@hauptmedia)
. Bug fixed: $server->getWorkerPid does not return the correct worker pid when being called from another worker context
. Bug fixed: init window size in http2 server
. Deprecated: redis server
. Bug fixed: close HTTP2 connection when there are errors
. Close connection when a process is stopped and it is managing http2 sessions
. Bug fixed: fix user land timer is not stopping when the server is shutting down
. Postgres client: return empty array if the result set is empty
. Postgres client: provide constant enums for $connection->resultStatus
. Postgres client: added new API $pg->reset() and $pg->status() (@RedChops)
. CI and tests: fixed many bugs in tests and improved the CI and testing (@hauptmedia)
. Build fix for gcc < 4.9 (@dmz-uk)