在Swoole协程中必须使用Swoole\Coroutine::sleep()替代原生sleep(),因为它非阻塞,仅暂停当前协程而不影响其他协程运行,且需在Coroutine\run()或协程环境中调用。

在 Swoole 协程环境中,不能使用 PHP 原生的 sleep() 函数,因为它会阻塞整个进程。你应该使用 Swoole 提供的协程版本 —— Swoole\Coroutine::sleep(),它可以在不阻塞进程的情况下实现协程级别的延时。
使用 Swoole\Coroutine::sleep()
这个方法用于在协程中暂停指定的秒数(支持小数,如 0.5 表示 500 毫秒),期间不会阻塞其他协程运行。示例代码:
use Swoole\Coroutine;
Coroutine\run(function () {
echo "开始\n";
Coroutine::sleep(2); // 暂停 2 秒
echo "2秒后继续\n";
});
注意事项
确保你在协程环境中调用该函数。也就是说,必须在 Coroutine\run() 或已创建的协程中使用,否则会抛出错误。错误用法(不在协程中):
Swoole\Coroutine::sleep(1); // 错误:未在协程上下文中调用
正确方式是包裹在协程中:
Swoole\Coroutine::create(function () {
Swoole\Coroutine::sleep(1);
echo "休眠结束\n";
});
与传统 sleep 的区别
PHP 原生 sleep() 是同步阻塞的,会卡住整个进程;而 Swoole\Coroutine::sleep() 是异步非阻塞的,仅挂起当前协程,其他协程和事件循环照常运行。举例对比:
// ❌ 错误:阻塞整个进程 sleep(2); // ✅ 正确:协程内安全休眠 Swoole\Coroutine::sleep(2);基本上就这些。只要记住在协程里用 Swoole\Coroutine::sleep() 替代原生 sleep() 就行了。










