Skip to content

From one and a half minutes to one hour to send #408

@chelssi

Description

@chelssi

Setup

  • Operating System: Linux
  • PHP Version: 8.1
  • web-push-php Version: 8.0

PHP extensions :

  • curl
  • gmp
  • mbstring
  • openssl

browsers:

  • Chrome
  • Firefox
  • Firefox for Mobile
  • Opera for Android
  • Samsung Internet Browser
  • Other

I was using version 6, and 44,000 endpoints were being sent in 1m 40s. After updating to version 8, the time has increased to almost 1 hour, and I don’t know what could be the reason.

This is the portion of sending code

$defaultOptions = [
    'TTL' => 300, // defaults (300) to 4 weeks
    'urgency' => 'normal', // protocol defaults to "normal"
    'topic' => 'new_event', // not defined by default,
    'batchSize' => 1000, // defaults to 1000
    'verify' => false,
    'timeout' => 6, // defaults to 20 
    '\GuzzleHttp\RequestOptions::ALLOW_REDIRECTS' => false
];

$webPush = new WebPush([], $defaultOptions);
$webPush->setAutomaticPadding(true);
$auth = array(
        'VAPID' => array(
            'subject' => 'https://www.mydomain.com',
            'publicKey' => file_get_contents(__DIR__ . '/../../../../keys/public_key.txt'),
            'privateKey' => file_get_contents(__DIR__ . '/../../../../keys/private_key.txt'),
        ),
    );
$webPush = new WebPush($auth);
$i = 0;
$notifications = [];
while ($row_subscription = $result -> fetch_assoc()){
    $i ++;
	$subscription_id = $row_subscription['subscription_id'];
        $payload = [
            "title" => $row_notificacion['title'],
            "body" => $row_notificacion['body'],
            "badge" => $row_notificacion['badge'],
            "icon" => $row_notificacion['icon'],
            "image" => $row_notificacion['image'],
            "url" => $row_notificacion['url'],
            "id" => $notification_id,
            "sid" => $subscription_id,
            "requireInteraction" => true,
            "vibrate" => "[300, 100, 400]"
        ];
    $data = json_encode($row_subscription);
    $subscription = Subscription::create(json_decode($data, true));
    $notifications[] = [
        'subscription' => $subscription,
        'payload' => json_encode($payload),
    ];
    if ($i % 1000 == 0 || $result->num_rows == $i) {
        foreach ($notifications as $notification) {
            $webPush->queueNotification($notification['subscription'], $notification['payload']);
        }

        foreach ($webPush->flush() as $report) {
            handleReport();
        }
        $notifications = [];
        
    }
}

Thank you

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions