improve time-space complexity of identifying receivers
This commit is contained in:
parent
2e4224683e
commit
8e912ba252
5 changed files with 12 additions and 50 deletions
|
@ -116,7 +116,7 @@ $server->on('workerStart', function ($server, $workerId) use (&$subscriptions, &
|
|||
*/
|
||||
$event = json_decode($payload, true);
|
||||
|
||||
$receivers = Realtime::identifyReceivers($event, $connections, $subscriptions);
|
||||
$receivers = Realtime::identifyReceivers($event, $subscriptions);
|
||||
|
||||
foreach ($receivers as $receiver) {
|
||||
if ($server->exist($receiver) && $server->isEstablished($receiver)) {
|
||||
|
|
|
@ -80,26 +80,20 @@ class Realtime
|
|||
* @param array $connections
|
||||
* @param array $subscriptions
|
||||
*/
|
||||
static function identifyReceivers(array &$event, array &$connections, array &$subscriptions)
|
||||
static function identifyReceivers(array &$event, array &$subscriptions)
|
||||
{
|
||||
$receivers = [];
|
||||
foreach ($connections as $connection) {
|
||||
if ($connection['projectId'] !== $event['project']) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($connection['roles'] as $role) {
|
||||
if (\array_key_exists($role, $subscriptions[$event['project']])) {
|
||||
foreach ($event['data']['channels'] as $channel) {
|
||||
if (
|
||||
\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;
|
||||
if ($subscriptions[$event['project']]) {
|
||||
foreach ($subscriptions[$event['project']] as $role => $subscription) {
|
||||
foreach ($event['data']['channels'] as $channel) {
|
||||
if (
|
||||
\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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,7 +160,6 @@ class RealtimeChannelsTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -197,7 +196,6 @@ class RealtimeChannelsTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -235,7 +233,6 @@ class RealtimeChannelsTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -273,7 +270,6 @@ class RealtimeChannelsTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -303,7 +299,6 @@ class RealtimeChannelsTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
|
|
@ -61,7 +61,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -72,7 +71,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -83,7 +81,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -93,7 +90,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -103,7 +99,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -113,7 +108,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -123,7 +117,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -133,7 +126,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -143,7 +135,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -153,7 +144,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -163,7 +153,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -174,7 +163,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -184,7 +172,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -195,7 +182,6 @@ class RealtimeGuestTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
|
|
@ -83,7 +83,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -94,7 +93,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -105,7 +103,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -116,7 +113,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -127,7 +123,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -138,7 +133,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -149,7 +143,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -160,7 +153,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -171,7 +163,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -181,7 +172,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -192,7 +182,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -202,7 +191,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
@ -213,7 +201,6 @@ class RealtimeTest extends TestCase
|
|||
|
||||
$receivers = Realtime::identifyReceivers(
|
||||
$event,
|
||||
$this->connections,
|
||||
$this->subscriptions
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in a new issue