1
0
Fork 0
mirror of synced 2024-06-29 19:50:26 +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]); $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') App::get('/v1/health/db')
->desc('Get DB') ->desc('Get DB')
->groups(['api', 'health']) ->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) { $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(''); $app = new App('');
$connection = $request->fd; $connection = $request->fd;
$request = new SwooleRequest($request); $request = new SwooleRequest($request);
Console::info("Connection open (user: {$connection}, worker: {$server->getWorkerId()})");
App::setResource('request', function () use ($request) { App::setResource('request', function () use ($request) {
return $request; return $request;
}); });
@ -152,8 +152,10 @@ $server->on('open', function (Server $server, Request $request) use (&$connectio
/* /*
* Abuse Check * 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'); return $register->get('db');
}); });
$timeLimit $timeLimit
@ -209,9 +211,9 @@ $server->on('message', function (Server $server, Frame $frame) {
$server->close($frame->fd); $server->close($frame->fd);
}); });
$server->on('close', function (Server $server, int $fd) use (&$connections, &$subscriptions) { $server->on('close', function (Server $server, int $connection) use (&$connections, &$subscriptions) {
Realtime::unsubscribe($fd, $subscriptions, $connections); Realtime::unsubscribe($connection, $subscriptions, $connections);
Console::info('Connection close: ' . $fd); Console::info('Connection close: ' . $connection);
}); });
$server->start(); $server->start();

View file

@ -87,6 +87,16 @@ class Realtime
/** /**
* Identifies the receivers of all subscriptions, based on the permissions and event. * 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 $event
* @param array $connections * @param array $connections
* @param array $subscriptions * @param array $subscriptions