🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 4.0.1 [TOC] ## 主要更新 * 支持`MySQL8`全新的`caching_sha2_password`密码验证算法 * 增加`enable_coroutine`配置项,用于关闭自动创建协程 * 移除`--enable-coroutine`编译配置 * 修复`chan->push`无法立即唤醒等待协程的问题 ## 关闭内置协程 `4.0.1`之前的版本,底层在`Server`和`Timer`的事件回调函数中会自动创建协程,如果回调函数中没有使用任何协程`API`,这会浪费一次协程创建/销毁操作。而且无法与`1.x`保持兼容。 新版本中增加了`enable_coroutine`配置项,可关闭内置协程。用户可根据需要,在回调函数中自行使用`Coroutine::create`或`go`创建协程。关闭内置协程后,底层与`1.x`版本的行为保持了一致性,实现了`100%`兼容。原先使用`1.x`的框架,也可以直接基于`4.0`作为运行环境。 现在可以动态选择是否启用内置协程,那么`--enable-coroutine`编译配置变得可有可无了。新版本中移除了该编译选项。 ~~~ use Swoole\Http\Request; use Swoole\Http\Response; $http = new swoole_http_server('127.0.0.1', 9501); $http->set([ 'enable_coroutine' => false, // close build-in coroutine ]); $http->on('workerStart', function () { echo "Coroutine is " . (Co::getuid() > 0 ? 'enable' : 'disable')."\n"; }); $http->on("request", function (Request $request, Response $response) { $response->header("Content-Type", "text/plain"); if ($request->server['request_uri'] == '/co') { //关闭内置协程后,需要手工创建协程 go(function () use ($response) { $response->end("Hello Coroutine #" . Co::getuid()); }); } else { //没有任何协程操作,这里不存在额外的协程调度开销 $response->end("Hello Swoole #" . Co::getuid()); } }); $http->start(); ~~~ * [主要更新](https://wiki.swoole.com/wiki/page/p-4.0.1.html#entry_h2_0) * [关闭内置协程](https://wiki.swoole.com/wiki/page/p-4.0.1.html#entry_h2_1)