v4.6.7 版本主要是一個 Bug 修復版本,沒有向下不兼容改動。php
此版本中修復了Http\Response::end()
方法老是返回 true
的問題,同時修改了 output_buffer_size
的默認值git
在以前的版本中 output_buffer_size
的默認值爲2M
,因爲受到 output_buffer_size
的限制,若是在調用end
時,須要發送的內容大於這個限制則會響應失敗,並拋出以下錯誤:github
use Swoole\Http\Server; use Swoole\Http\Request; use Swoole\Http\Response; $http = new Server('127.0.0.1', 9501); $http->set([ 'http_compression' => false, 'buffer_output_size' => 128 * 1024, ]); $http->on('request', function (Request $request, Response $response) { assert($response->end(str_repeat('A', 256 * 1024)) === false); assert(swoole_last_error() === SWOOLE_ERROR_DATA_LENGTH_TOO_LARGE); }); $http->start();
使用以上代碼便可復現該錯誤
WARNING finish (ERRNO 1203): The length of data [262144] exceeds the output buffer size[131072], please use the sendfile, chunked transfer mode or adjust the output_buffer_size
之前的解決方法爲:使用 sendfile
、write
或調整 output_buffer_size
,而此版本中將output_buffer_size
的默認值提升到了無符號 INT 最大值(UINT_MAX
)bash
從 4.5 版本開始去掉了 Worker 進程共享內存的使用,改成了所有使用 UnixSocket
管道,因此再也不須要預先分配內存。output_buffer_size
參數只是一個限制,設置爲比較大的參數也不會致使額外佔用內存。swoole
同時還修復了end
的返回值一直是true
的問題,以上代碼中產生錯誤後未成功響應,返回值爲false
curl
下面是完整的更新日誌:函數
Process::signal()
函數 (#4190) (@matyhtf)Http\Response::end()
方法老是返回 true 的問題 (swoole/swoole-src@66fcc35) (@matyhtf)