Laravel中能否保持连接存活并分块发送响应?
在Laravel中实现HTTP实时逐行响应(保持连接存活)
如果需要在处理批量操作时,保持HTTP连接存活并实时逐行向客户端返回响应(类似实时日志输出),可以通过Laravel的响应发送机制实现。以下是具体的示例代码:
use Illuminate\Support\Facades\Http; use Carbon\Carbon; for ($id = 0; $id < 100; $id++) { $response = Http::get("http://api.example.com/user/{$id}"); response()->send('['.Carbon::now()->format('d/m/Y H:i:s')."] - {$response->status()} - {$response->body()}"); } return response()->send('All requests done');
代码说明
这段代码的逻辑是:
- 循环发起100次对用户API的请求
- 每次请求完成后,立即调用
response()->send()将带时间戳的请求状态、响应内容实时发送给客户端 - 所有请求完成后,发送最终的完成提示
场景对比
这种方式和Artisan命令中用$this->line('bla')实时输出控制台进度的逻辑一致,但适配了HTTP请求场景——客户端可以实时看到每一步的处理结果,无需等待全部操作完成。
优势
相比将所有结果拼接成单个字符串后一次性返回,实时逐行响应能让用户及时获取处理进度,尤其是在处理耗时较长的批量操作时,体验会更友好。
内容的提问来源于stack exchange,提问作者Mathias Hillmann
相关产品推荐
相关产品推荐

