1
0
Fork 0
mirror of synced 2024-06-29 19:50:26 +12:00

improve time-space complexity of identifying receivers

This commit is contained in:
Torsten Dittmann 2021-03-01 16:33:33 +01:00
parent 2e4224683e
commit 8e912ba252
5 changed files with 12 additions and 50 deletions

View file

@ -116,7 +116,7 @@ $server->on('workerStart', function ($server, $workerId) use (&$subscriptions, &
*/ */
$event = json_decode($payload, true); $event = json_decode($payload, true);
$receivers = Realtime::identifyReceivers($event, $connections, $subscriptions); $receivers = Realtime::identifyReceivers($event, $subscriptions);
foreach ($receivers as $receiver) { foreach ($receivers as $receiver) {
if ($server->exist($receiver) && $server->isEstablished($receiver)) { if ($server->exist($receiver) && $server->isEstablished($receiver)) {

View file

@ -80,26 +80,20 @@ class Realtime
* @param array $connections * @param array $connections
* @param array $subscriptions * @param array $subscriptions
*/ */
static function identifyReceivers(array &$event, array &$connections, array &$subscriptions) static function identifyReceivers(array &$event, array &$subscriptions)
{ {
$receivers = []; $receivers = [];
foreach ($connections as $connection) { if ($subscriptions[$event['project']]) {
if ($connection['projectId'] !== $event['project']) { foreach ($subscriptions[$event['project']] as $role => $subscription) {
continue; foreach ($event['data']['channels'] as $channel) {
} if (
\array_key_exists($channel, $subscriptions[$event['project']][$role])
foreach ($connection['roles'] as $role) { && (\in_array($role, $event['permissions']) || \in_array('*', $event['permissions']))
if (\array_key_exists($role, $subscriptions[$event['project']])) { ) {
foreach ($event['data']['channels'] as $channel) { foreach (array_keys($subscriptions[$event['project']][$role][$channel]) as $ids) {
if ( $receivers[] = $ids;
\array_key_exists($channel, $subscriptions[$event['project']][$role])
&& (\in_array($role, $event['permissions']) || \in_array('*', $event['permissions']))
) {
foreach (array_keys($subscriptions[$event['project']][$role][$channel]) as $ids) {
$receivers[] = $ids;
}
break;
} }
break;
} }
} }
} }

View file

@ -160,7 +160,6 @@ class RealtimeChannelsTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -197,7 +196,6 @@ class RealtimeChannelsTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -235,7 +233,6 @@ class RealtimeChannelsTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -273,7 +270,6 @@ class RealtimeChannelsTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -303,7 +299,6 @@ class RealtimeChannelsTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );

View file

@ -61,7 +61,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -72,7 +71,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -83,7 +81,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -93,7 +90,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -103,7 +99,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -113,7 +108,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -123,7 +117,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -133,7 +126,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -143,7 +135,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -153,7 +144,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -163,7 +153,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -174,7 +163,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -184,7 +172,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -195,7 +182,6 @@ class RealtimeGuestTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );

View file

@ -83,7 +83,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -94,7 +93,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -105,7 +103,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -116,7 +113,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -127,7 +123,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -138,7 +133,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -149,7 +143,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -160,7 +153,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -171,7 +163,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -181,7 +172,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -192,7 +182,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -202,7 +191,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );
@ -213,7 +201,6 @@ class RealtimeTest extends TestCase
$receivers = Realtime::identifyReceivers( $receivers = Realtime::identifyReceivers(
$event, $event,
$this->connections,
$this->subscriptions $this->subscriptions
); );