Краткий ответ
Поскольку сервер инициирует процесс проверки, подключен ли пользователь , в данный момент , вам необходимо что-то похожее на WebSockets . Вы можете использовать, например, Socket.IO
Объяснение
- Установить двусторонний канал связи между клиентом и сервером.
- На сервере ведется список всех идентификаторов сеансов клиентов , в данный момент подключен. Если клиент вышел из системы, удалите соответствующий идентификатор
- Если вы хотите отправить push-уведомление, отправьте его пользователям, соответствующим вашему списку идентификаторов сеансов
Ведение коллекции идентификаторов сеансов
Использование карты для поддержки коллекций подключенных клиентов может быть более практичным для вашего варианта использования.
const sessionsMap = {};
io.on('connection', (socket) => {
const sessionId = socket.id;
socket.emit('askForJWT');
socket.on('receivedJWT', (jwt) => {
if (isValid(jwt)) {
const userId = extractUserIdFromJWT(jwt);
sessionsMap[sessionId] = userId;
}
});
socket.on('disconnect', () => {
delete sessionsMap[sessionId];
});
});
Отправка уведомления
Перебирайте значения внутри карты, чтобы отправить их (используя выбранный вами API) уведомление.
function sendNotification(message) {
const listOfUsersIds = Object.values(sessionsMap);
listOfUsersIds.forEach((userId) => {
// Here you send the notification with your API of choice
api.send({message, userId});
});
}