Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f67fd2a476 |
+14
-24
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user