javascript — отправка push-уведомлений всем подписчикам за один звонок

Отправка push-уведомлений всем подписчикам за один звонок

Я внедряю push-уведомления в Интернете с работниками сервисов на моем сайте. У меня есть веб-сайт работы, и новая работа публикуется через каждый час. Я хочу уведомить подписчика о новой работе, когда она будет опубликована. Я сделал реализацию в получении подписанного и написанного пользователем узла сервера, а также для отправки push-уведомлений путем генерации ключей VAPID.

У меня есть вопрос, я чувствую, когда мне нужно отправить push-уведомление всем абонентам, нужно ли мне отправлять новый вызов для каждого пользователя, или есть какой-то механизм, чтобы отправить его одним вызовом всем абонентам.

Например, если у меня 100 000, нужно ли мне совершать 100 000 звонков или есть какой-то другой способ отправить 1 звонок и уведомить всех 100 000 подписчиков о новом обновлении работы за один раз?

Я определенно чувствую, что меня задушит соответствующий браузер, если я отправлю тысячи звонков за один раз.

Есть ли способ сделать это одним звонком?

Вот мой текущий код маршрута от экспресс-сервера отправки уведомлений всем подписчикам.

 const express = require('express'); const router = express.Router(); const mongoose = require('mongoose'); const Subscription = mongoose.model('subscribers'); const q = require('q'); const webPush = require('web-push'); const keys = require('./../config/keys'); router.post('/', (req, res) ={amp}gt; { const payload = { title: req.body.title, message: req.body.message, url: req.body.url, ttl: req.body.ttl, icon: req.body.icon, image: req.body.image, badge: req.body.badge, tag: req.body.tag }; Subscription.find({}, (err, subscriptions) ={amp}gt; { if (err) { console.error(`Error occurred while getting subscriptions`); res.status(500).json({ error: 'Technical error occurred' }); } else { let parallelSubscriptionCalls = subscriptions.map((subscription) ={amp}gt; { return new Promise((resolve, reject) ={amp}gt; { const pushSubscription = { endpoint: subscription.endpoint, keys: { p256dh: subscription.keys.p256dh, auth: subscription.keys.auth } }; const pushPayload = JSON.stringify(payload); const pushOptions = { vapidDetails: { subject: 'http://example.com', privateKey: keys.privateKey, publicKey: keys.publicKey }, TTL: payload.ttl, headers: {} }; webPush.sendNotification( pushSubscription, pushPayload, pushOptions ).then((value) ={amp}gt; { resolve({ status: true, endpoint: subscription.endpoint, data: value }); }).catch((err) ={amp}gt; { reject({ status: false, endpoint: subscription.endpoint, data: err }); }); }); }); q.allSettled(parallelSubscriptionCalls).then((pushResults) ={amp}gt; { console.info(pushResults); }); res.json({ data: 'Push triggered' }); } }); 

});

 router.get('/', (req, res) ={amp}gt; { res.json({ data: 'Invalid Request Bad' }); }); module.exports = router; 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector