在Swoole协程中发起网络请求必须使用Coroutine\Client或Coroutine\Http\Client等协程组件,禁用curl_exec等阻塞函数;TCP请求需依次创建实例、connect、检查返回值、send/recv、close;HTTP请求支持构造配置、set参数、get/post调用,statusCode为负数表示连接层异常;并发请求需用co\run包裹,每个go协程独立创建Client并完成全流程。

在Swoole协程环境中发起网络请求,必须避开PHP原生阻塞式函数(如curl_exec、file_get_contents),改用Swoole提供的协程客户端组件,否则会阻塞整个协程调度器,导致并发能力失效。
使用Coroutine\Client发起TCP/UDP请求
第一步:创建协程TCP客户端实例,指定协议类型为SWOOLE_SOCK_TCP
第二步:调用connect()连接目标服务,传入host、port和超时时间(单位秒,支持浮点数)→ 这一步底层自动协程切换并解析域名,无需额外处理DNS
第三步:发送数据前务必检查connect()返回值是否为true;【若返回false,必须先调用close()释放socket,再重试connect,否则下次connect会失败】
第四步:使用send()发送二进制或字符串数据,recv()接收响应;recv()返回false表示出错,返回空字符串''表示对端已关闭连接
第五步:通信结束后调用close()显式关闭连接,避免资源泄漏
使用Coroutine\Http\Client发起HTTP请求
方法一:构造时指定host和port,SSL请求需显式传入true
方法二:set()配置超时、headers等参数,timeout字段同时控制connect/send/recv三阶段超时
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
方法三:调用get()或post()发起请求,立即返回;响应体存于body属性,状态码存于statusCode属性
注意:statusCode为负数说明连接层异常(如-110表示超时,-111表示拒绝连接),此时应检查errCode并用socket_strerror($client->errCode)获取具体错误信息
并发多个HTTP请求
① 用co\run()包裹全部协程逻辑,确保运行在协程调度器中
② 对每个URL启动一个go()协程,各自创建独立的Coroutine\Http\Client实例
③ 每个协程内完成get()→读取body→close()全流程,互不干扰
④ 若需汇总结果,可用Channel或引用数组收集,但Channel更符合协程安全规范
这一步操作起来很简单,直接把文件拖进去就行。

















