1 Commits

Author SHA1 Message Date
as2252258 f67fd2a476 eee 2026-06-24 07:26:11 +08:00
+14 -24
View File
@@ -5,6 +5,7 @@ namespace Coroutine\Server;
use Kiri\Di\Context; use Kiri\Di\Context;
use Kiri\Di\Inject\Container; use Kiri\Di\Inject\Container;
use Kiri\Router\Constrict\ConstrictRequest; use Kiri\Router\Constrict\ConstrictRequest;
use Kiri\Router\Router;
use Psr\Http\Message\RequestInterface; use Psr\Http\Message\RequestInterface;
use Swoole\Coroutine; use Swoole\Coroutine;
use Swoole\Coroutine\Http\Server; use Swoole\Coroutine\Http\Server;
@@ -38,16 +39,12 @@ abstract class Websocket
$server = new Server($config->host, $config->port, false); $server = new Server($config->host, $config->port, false);
$this->configureServer($server); $this->configureServer($server);
$server->handle($config->normalizePath($config->websocketPath), fn(Request $request, Response $ws) => $this->handler($request, $ws)); $server->handle('/', fn(Request $request, Response $ws) => $this->handler($request, $ws));
if ($config->exposeOnlineLists) {
$server->handle($config->normalizePath($config->onlineListPath), fn(Request $request, Response $ws) => $this->getLists($request, $ws));
}
echo 'websocket server start at ' . $config->host . ':' . $config->port . PHP_EOL; echo 'websocket server start at ' . $config->host . ':' . $config->port . PHP_EOL;
$server->start(); $server->start();
} }
/** /**
* @param Request $request * @param Request $request
* @param Response $ws * @param Response $ws
@@ -86,8 +83,7 @@ abstract class Websocket
public function handler(Request $request, Response $ws): void public function handler(Request $request, Response $ws): void
{ {
$upgraded = false; $upgraded = false;
$userId = null; $userId = null;
$fd = null;
try { try {
$psr7Request = $this->authorizeConnection($request); $psr7Request = $this->authorizeConnection($request);
@@ -97,10 +93,10 @@ abstract class Websocket
} }
$upgraded = true; $upgraded = true;
$userId = $psr7Request->getAuthority()->getUniqueId(); $userId = $psr7Request->getAuthority()->getUniqueId();
$connection = new Struct($psr7Request->getAuthority(), $request, $ws); $connection = new Struct($psr7Request->getAuthority(), $request, $ws);
$fd = $connection->fd; $fd = $connection->fd;
$this->transport->add($userId, $connection); $this->transport->add($userId, $connection);
defer(function () use ($userId, $fd) { defer(function () use ($userId, $fd) {
@@ -197,8 +193,8 @@ abstract class Websocket
{ {
if ($this->config->maxCoroutine > 0 && class_exists(Coroutine::class)) { if ($this->config->maxCoroutine > 0 && class_exists(Coroutine::class)) {
Coroutine::set([ Coroutine::set([
'max_coroutine' => $this->config->maxCoroutine, 'max_coroutine' => $this->config->maxCoroutine,
]); ]);
} }
} }
@@ -259,22 +255,16 @@ abstract class Websocket
} }
$message = match ($status) { $message = match ($status) {
400 => 'Bad Request', 400 => 'Bad Request',
401 => 'Unauthorized', 401 => 'Unauthorized',
403 => 'Forbidden', 403 => 'Forbidden',
404 => 'Not Found', 404 => 'Not Found',
409 => 'Conflict', 409 => 'Conflict',
413 => 'Payload Too Large', 413 => 'Payload Too Large',
default => 'Internal Server Error', default => 'Internal Server Error',
}; };
error_log(sprintf( error_log(sprintf('[%s] %s in %s:%d', static::class, $throwable->getMessage(), $throwable->getFile(), $throwable->getLine()));
'[%s] %s in %s:%d',
static::class,
$throwable->getMessage(),
$throwable->getFile(),
$throwable->getLine(),
));
if ($upgraded) { if ($upgraded) {
@$ws->close(); @$ws->close();