多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 错误信息: XXXX client has already been bound to another coroutine [TOC] 使用协程客户端时出现以下错误信息: ~~~ redis client has already been bound to another coroutine. ~~~ 这表示在两个协程内使用了同一个客户端。请修改`PHP`代码,避免出现此情况。 ## 错误实例 ~~~ $redis = new Co\Redis; go(function () use ($redis) { $redis->get("key"); }); go(function () use ($redis) { $redis->get("key"); }); ~~~ 例子中两个协程同时使用`$redis->get`进行`IO`操作,会引起混乱。底层在第二个协程调用`$redis->get`时会抛出上述致命错误。 ## 解决方案 使用`Swoole\Coroutine\Channel`或`SplQueue`实现连接池,管理协程客户端资源。一个客户端对象仅用于一个协程,操作完毕后,再释放给其他协程使用。