diff --git a/CHANGELOG.md b/CHANGELOG.md index c583422b2b..e9bce43e5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -92,6 +92,7 @@ Now: - [#448](https://github.com/hyperf-cloud/hyperf/pull/448) Fixed TCP Server does not works when HTTP Server or WebSocket Server exists. - [#623](https://github.com/hyperf-cloud/hyperf/pull/623) Fixed the argument value will be replaced by default value when pass a `null` to the method of proxy class. +- [#647](https://github.com/hyperf-cloud/hyperf/pull/647) Append `eof` to TCP response, according to the server configuration. # v1.0.16 - 2019-09-20 diff --git a/src/rpc-server/src/Server.php b/src/rpc-server/src/Server.php index 5c64ebe701..1b3a22e84e 100644 --- a/src/rpc-server/src/Server.php +++ b/src/rpc-server/src/Server.php @@ -126,7 +126,7 @@ public function onReceive(SwooleServer $server, int $fd, int $fromId, string $da $response = $this->transferToResponse($response); } if ($response) { - $server->send($fd, (string) $response->getBody()); + $this->send($server, $fd, $response); } } } @@ -139,6 +139,22 @@ public function onConnect(SwooleServer $server) $this->logger->debug(sprintf('Connect to %s:%d', $port->host, $port->port)); } + protected function send(SwooleServer $server, int $fd, ResponseInterface $response): void + { + $eof = $server->setting['package_eof'] ?? ''; + $serverPort = $server->getClientInfo($fd)['server_port'] ?? null; + if ($serverPort) { + foreach ($server->ports ?? [] as $port) { + if ($port->port === $serverPort) { + $eof = $port->setting['package_eof'] ?? $eof; + break; + } + } + } + + $server->send($fd, (string) $response->getBody() . $eof); + } + abstract protected function createCoreMiddleware(): CoreMiddlewareInterface; abstract protected function buildRequest(int $fd, int $fromId, string $data): ServerRequestInterface;