Swoole协程上下文赋值后立即为空,原因是什么?
Swoole协程上下文返回NULL问题解决
问题根源
Co::getContext() 只能在协程运行环境中调用,而你在Start事件回调里执行代码时,当前处于主进程的同步非协程环境,没有任何协程实例存在,所以返回NULL是正常行为,和配置无关。
正确使用方式
协程上下文的作用是在同一个协程的不同调用层级间共享数据,必须在协程触发的事件里使用,比如WebSocket的Open、Message事件,或者异步任务、定时器的协程环境中。
示例代码:
$server->on("Open", function(Server $server, $request) { // 此处为协程环境,可正常操作协程上下文 Co::getContext()['total'] = 10; var_export(Co::getContext()); });
补充说明
- Swoole默认支持协程上下文,不需要额外配置,只要确保在协程环境中调用即可。
- 如果你需要在主进程(如
Start事件)中存储全局数据,直接使用全局变量、类静态属性或者单例类即可,无需借助协程上下文。
内容的提问来源于stack exchange,提问作者zzmaster
相关产品推荐
相关产品推荐

