首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_http_response->write output buffer has been overflowed
使用for循环读取本地一个文件并使用write发送chunk到浏览器进行下载 之所以不使用sendfile是因为正好要把每个chunk进行缓存 也就是把一个文件分片缓存 然后发送比较大的文件的时候会提示output buffer has been overflowed 经过查询论坛 已知是因为发送的太快 客户端来不及接受 导致缓冲区溢出 但是我使用以下选项将缓冲区调大到512M 问题依旧(文件只有20M) {{{ $http->set([ 'buffer_output_size' => 512 * 1024 *1024, ]); }}} 发送文件代码如下 {{{ $file_handle = fopen('FILE', 'r'); while (!feof($file_handle)) { $chunk = fread($file_handle, 512000); $response->write($chunk); } $response->end(); fclose($file_handle); }}} 请问如何能解决这个问题 比如等上个chunk浏览器已接收再发送下个chunk 但是怎么判断上个chunk已接收也是个问题 翻文档没看到什么参数能判断 清大佬帮忙解答一下
发布于4年前 · 0 次浏览 · 来自
提问
j
jingege
使用for循环读取本地一个文件并使用write发送chunk到浏览器进行下载 之所以不使用sendfile是因为正好要把每个chunk进行缓存 也就是把一个文件分片缓存 然后发送比较大的文件的时候会提示output buffer has been overflowed 经过查询论坛 已知是因为发送的太快 客户端来不及接受 导致缓冲区溢出 但是我使用以下选项将缓冲区调大到512M 问题依旧(文件只有20M) {{{ $http->set([ 'buffer_output_size' => 512 * 1024 *1024, ]); }}} 发送文件代码如下 {{{ $file_handle = fopen('FILE', 'r'); while (!feof($file_handle)) { $chunk = fread($file_handle, 512000); $response->write($chunk); } $response->end(); fclose($file_handle); }}} 请问如何能解决这个问题 比如等上个chunk浏览器已接收再发送下个chunk 但是怎么判断上个chunk已接收也是个问题 翻文档没看到什么参数能判断 清大佬帮忙解答一下
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-02-06
昵
昵称
版本信息 PHP: {{{ PHP 7.0.31 (cli) (built: Jul 20 2018 17:59:11) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies }}} Swoole: {{{ swoole swoole support => enabled Version => 4.0.2 Author =>
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。