Skip to content

Commit 53c6dc3

Browse files
committed
Simplify HTTP request handling
1 parent 0dc0de1 commit 53c6dc3

File tree

4 files changed

+19
-38
lines changed

4 files changed

+19
-38
lines changed

src/Connection/TcpConnection.php

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,9 @@
1919
use RuntimeException;
2020
use stdClass;
2121
use Throwable;
22-
use Workerman\Events\Ev;
23-
use Workerman\Events\Event;
2422
use Workerman\Events\EventInterface;
25-
use Workerman\Events\Select;
2623
use Workerman\Protocols\Http;
2724
use Workerman\Protocols\Http\Request;
28-
use Workerman\Protocols\ProtocolInterface;
2925
use Workerman\Worker;
3026

3127
use function ceil;
@@ -252,11 +248,6 @@ class TcpConnection extends ConnectionInterface implements JsonSerializable
252248
*/
253249
public array $headers = [];
254250

255-
/**
256-
* @var ?Request
257-
*/
258-
public ?Request $request = null;
259-
260251
/**
261252
* Is safe.
262253
*
@@ -672,9 +663,7 @@ public function baseRead($socket, bool $checkEof = true): void
672663
++self::$statistics['total_request'];
673664
if ($this->protocol === Http::class) {
674665
$request = clone $requests[$buffer];
675-
$request->destroy();
676666
$request->connection = $this;
677-
$this->request = $request;
678667
try {
679668
($this->onMessage)($this, $request);
680669
} catch (Throwable $e) {
@@ -750,7 +739,6 @@ public function baseRead($socket, bool $checkEof = true): void
750739
($this->onMessage)($this, $request);
751740
if ($request instanceof Request) {
752741
$requests[$oneRequestBuffer] = clone $request;
753-
$requests[$oneRequestBuffer]->destroy();
754742
} else {
755743
$requests[$oneRequestBuffer] = $request;
756744
}
@@ -771,7 +759,7 @@ public function baseRead($socket, bool $checkEof = true): void
771759
return;
772760
}
773761

774-
// Applications protocol is not set.
762+
// Application protocol is not set.
775763
++self::$statistics['total_request'];
776764
try {
777765
($this->onMessage)($this, $this->recvBuffer);
@@ -1060,7 +1048,6 @@ public function destroy(): void
10601048
$this->error($e);
10611049
}
10621050
}
1063-
$this->request = null;
10641051
$this->sendBuffer = $this->recvBuffer = '';
10651052
$this->currentPackageLength = 0;
10661053
$this->isPaused = $this->sslHandshakeCompleted = false;

src/Protocols/Http.php

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,7 @@ public static function decode(string $buffer, TcpConnection $connection): Reques
136136
static $requests = [];
137137
if (isset($requests[$buffer])) {
138138
$request = $requests[$buffer];
139-
$request->destroy();
140139
$request->connection = $connection;
141-
$connection->request = $request;
142140
return $request;
143141
}
144142
$request = new static::$requestClass($buffer);
@@ -150,7 +148,6 @@ public static function decode(string $buffer, TcpConnection $connection): Reques
150148
$request = clone $request;
151149
}
152150
$request->connection = $connection;
153-
$connection->request = $request;
154151
return $request;
155152
}
156153

@@ -163,11 +160,6 @@ public static function decode(string $buffer, TcpConnection $connection): Reques
163160
*/
164161
public static function encode(mixed $response, TcpConnection $connection): string
165162
{
166-
$request = null;
167-
if (isset($connection->request)) {
168-
$request = $connection->request;
169-
$request->connection = $connection->request = null;
170-
}
171163

172164
if (!is_object($response)) {
173165
$extHeader = '';
@@ -197,19 +189,9 @@ public static function encode(mixed $response, TcpConnection $connection): strin
197189
}
198190

199191
if (isset($response->file)) {
200-
$requestRange = [0, 0];
201-
if ($value = $request?->header('range')) {
202-
if (str_starts_with($value, 'bytes=')) {
203-
$arr = explode('-', substr($value, 6));
204-
if (count($arr) === 2) {
205-
$requestRange = [(int)$arr[0], (int)$arr[1]];
206-
}
207-
}
208-
}
209-
210192
$file = $response->file['file'];
211-
$offset = $response->file['offset'] ?: $requestRange[0];
212-
$length = $response->file['length'] ?: $requestRange[1];
193+
$offset = $response->file['offset'] ?: 0;
194+
$length = $response->file['length'] ?: 0;
213195
clearstatcache();
214196
$fileSize = (int)filesize($file);
215197
$bodyLen = $length > 0 ? $length : $fileSize - $offset;

src/Protocols/Http/Request.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ public function __unset(string $name): void
734734
}
735735

736736
/**
737-
* __wakeup.
737+
* Wakeup.
738738
*
739739
* @return void
740740
*/
@@ -744,11 +744,11 @@ public function __wakeup(): void
744744
}
745745

746746
/**
747-
* Destroy.
747+
* Clone.
748748
*
749749
* @return void
750750
*/
751-
public function destroy(): void
751+
public function __clone(): void
752752
{
753753
if ($this->context) {
754754
$this->context = [];
@@ -757,6 +757,15 @@ public function destroy(): void
757757
$this->properties = [];
758758
}
759759
$this->connection = null;
760+
}
761+
762+
/**
763+
* Destructor.
764+
*
765+
* @return void
766+
*/
767+
public function __destruct()
768+
{
760769
if (isset($this->data['files']) && $this->isSafe) {
761770
clearstatcache();
762771
array_walk_recursive($this->data['files'], function ($value, $key) {

src/Protocols/Http/Response.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,10 @@ public function __toString(): string
550550
if (!isset($headers['Content-Type'])) {
551551
$head .= "Content-Type: text/html;charset=utf-8\r\n";
552552
} else if ($headers['Content-Type'] === 'text/event-stream') {
553-
return $head . $this->body;
553+
// For Server-Sent Events, send headers once and keep the connection open.
554+
// Headers must be terminated by an empty line; ignore any preset body to avoid
555+
// polluting the event stream with extra bytes or OS-specific newlines.
556+
return $head . "\r\n";
554557
}
555558

556559
if (!isset($headers['Transfer-Encoding'])) {

0 commit comments

Comments
 (0)