1
0
Fork 0
mirror of synced 2024-06-27 02:31:04 +12:00

adapt to review

This commit is contained in:
Torsten Dittmann 2021-03-10 14:39:37 +01:00
parent e5f6fbbc73
commit d462c5dce5
3 changed files with 18 additions and 17 deletions

View file

@ -33,17 +33,6 @@ App::get('/v1/health/version')
$response->json(['version' => APP_VERSION_STABLE]);
});
App::get('/v1/health/realtime')
->desc('Get Realtime')
->groups(['api', 'health'])
->label('scope', 'public')
->inject('response')
->action(function ($response) {
/** @var Utopia\Response $response */
// TODO: realtime health
$response->json(['status' => 'OK']);
});
App::get('/v1/health/db')
->desc('Get DB')
->groups(['api', 'health'])

View file

@ -119,12 +119,12 @@ $server->on('start', function (Server $server) {
});
$server->on('open', function (Server $server, Request $request) use (&$connections, &$subscriptions, &$register) {
Console::info("Connection open (user: {$request->fd}, connections: {}, worker: {$server->getWorkerId()})");
$app = new App('');
$connection = $request->fd;
$request = new SwooleRequest($request);
Console::info("Connection open (user: {$connection}, worker: {$server->getWorkerId()})");
App::setResource('request', function () use ($request) {
return $request;
});
@ -152,8 +152,10 @@ $server->on('open', function (Server $server, Request $request) use (&$connectio
/*
* Abuse Check
*
* Abuse limits are connecting 128 times per minute and ip address.
*/
$timeLimit = new TimeLimit('url:{url},ip:{ip}', 60, 60, function () use ($register) {
$timeLimit = new TimeLimit('url:{url},ip:{ip}', 128, 60, function () use ($register) {
return $register->get('db');
});
$timeLimit
@ -209,9 +211,9 @@ $server->on('message', function (Server $server, Frame $frame) {
$server->close($frame->fd);
});
$server->on('close', function (Server $server, int $fd) use (&$connections, &$subscriptions) {
Realtime::unsubscribe($fd, $subscriptions, $connections);
Console::info('Connection close: ' . $fd);
$server->on('close', function (Server $server, int $connection) use (&$connections, &$subscriptions) {
Realtime::unsubscribe($connection, $subscriptions, $connections);
Console::info('Connection close: ' . $connection);
});
$server->start();

View file

@ -87,6 +87,16 @@ class Realtime
/**
* Identifies the receivers of all subscriptions, based on the permissions and event.
*
* The processing works in linear time complexity, meaning it will increase in time - the same amount it increases in space.
*
* Example with a event with user:XXX permissions and with X users spread across 10 different channels:
* - 0.014 ms (±6.88%) | 10 Connections / 100 Subscriptions
* - 0.070 ms (±3.71%) | 100 Connections / 1,000 Subscriptions
* - 0.846 ms (±2.74%) | 1,000 Connections / 10,000 Subscriptions
* - 10.866 ms (±1.01%) | 10,000 Connections / 100,000 Subscriptions
* - 110.201 ms (±2.32%) | 100,000 Connections / 1,000,000 Subscriptions
* - 1,121.328 ms (±0.84%) | 1,000,000 Connections / 10,000,000 Subscriptions
*
* @param array $event
* @param array $connections
* @param array $subscriptions