44
55use Illuminate \Http \Response as IlluminateResponse ;
66use Swoole \Http \Response as SwooleResponse ;
7+ use Swoole \Http \Request as SwooleRequest ;
78use Symfony \Component \HttpFoundation \BinaryFileResponse ;
89use Symfony \Component \HttpFoundation \Response as SymfonyResponse ;
910use Symfony \Component \HttpFoundation \StreamedResponse ;
@@ -17,6 +18,11 @@ class Response
1718 */
1819 protected $ swooleResponse ;
1920
21+ /**
22+ * @var \Swoole\Http\Request
23+ */
24+ protected $ swooleRequest ;
25+
2026 /**
2127 * @var \Illuminate\Http\Response
2228 */
@@ -27,24 +33,27 @@ class Response
2733 *
2834 * @param $illuminateResponse
2935 * @param \Swoole\Http\Response $swooleResponse
36+ * @param \Swoole\Http\Request $swooleRequest
3037 *
3138 * @return \SwooleTW\Http\Transformers\Response
3239 */
33- public static function make ($ illuminateResponse , SwooleResponse $ swooleResponse )
40+ public static function make ($ illuminateResponse , SwooleResponse $ swooleResponse, SwooleRequest $ swooleRequest )
3441 {
35- return new static ($ illuminateResponse , $ swooleResponse );
42+ return new static ($ illuminateResponse , $ swooleResponse, $ swooleRequest );
3643 }
3744
3845 /**
3946 * Response constructor.
4047 *
4148 * @param mixed $illuminateResponse
4249 * @param \Swoole\Http\Response $swooleResponse
50+ * @param \Swoole\Http\Request $swooleRequest
4351 */
44- public function __construct ($ illuminateResponse , SwooleResponse $ swooleResponse )
52+ public function __construct ($ illuminateResponse , SwooleResponse $ swooleResponse, SwooleRequest $ swooleRequest )
4553 {
4654 $ this ->setIlluminateResponse ($ illuminateResponse );
4755 $ this ->setSwooleResponse ($ swooleResponse );
56+ $ this ->setSwooleRequest ($ swooleRequest );
4857 }
4958
5059 /**
@@ -133,6 +142,12 @@ protected function sendInChunk($content)
133142 return ;
134143 }
135144
145+ // Swoole Chunk mode does not support compress by default, this patch only supports gzip
146+ if ($ chunkGzip ) {
147+ $ this ->swooleResponse ->header ('Content-Encoding ' , 'gzip ' );
148+ $ content = gzencode ($ content , config ('swoole_http.server.options.http_compression_level ' , 3 ));
149+ }
150+
136151 foreach (str_split ($ content , static ::CHUNK_SIZE ) as $ chunk ) {
137152 $ this ->swooleResponse ->write ($ chunk );
138153 }
@@ -184,4 +199,37 @@ public function getIlluminateResponse()
184199 {
185200 return $ this ->illuminateResponse ;
186201 }
202+
203+ /**
204+ * @param \Swoole\Http\Request $swooleRequest
205+ *
206+ * @return \SwooleTW\Http\Transformers\Response
207+ */
208+ protected function setSwooleRequest (SwooleRequest $ swooleRequest )
209+ {
210+ $ this ->swooleRequest = $ swooleRequest ;
211+
212+ return $ this ;
213+ }
214+
215+ /**
216+ * @return \Swoole\Http\Request
217+ */
218+ public function getSwooleRequest ()
219+ {
220+ return $ this ->swooleRequest ;
221+ }
222+
223+ /**
224+ * @param string $responseContentEncoding
225+ * @return bool
226+ */
227+ protected function canGzipContent ($ responseContentEncoding )
228+ {
229+ return empty ($ responseContentEncoding ) &&
230+ config ('swoole_http.server.options.http_compression ' , true ) &&
231+ !empty ($ this ->swooleRequest ->header ['accept-encoding ' ]) &&
232+ strpos ($ this ->swooleRequest ->header ['accept-encoding ' ], 'gzip ' ) !== false &&
233+ function_exists ('gzencode ' );
234+ }
187235}
0 commit comments