@mega-epic

Как обрабатывать несколько SSE по событию на сервере?

Всем привет. Пишу веб-приложение в рамках АИС на предприятии. сервер nodejs+mysql. Не могу разобраться со следующей задачей (в силу недостатка опыта видимо). Постараюсь в кратце:

Задача: У заведующего производством на форме в веб-приложении должна в онлайн-режиме изменятся определенная цифра (например кол-во произведенных стульев). Т.е. рабочий сделал стул и на своей форме нажал кнопку "добавить стул", и в этот момент на форме у управляющего сама поменялась цифра без всяких обновлений страницы(например с 4шт на 5шт).

Как я начал делать(Дальнейший текст может вас травмировать, там внизу суть вопроса):

Начал гуглить способы получения данных с сервера онлайн. Нашел что мне подойдет Server-Sent Events.

С клиентом более-менее алгоритм понятен: создаюnew EventSource(). На получение нового сообщения вешаю обработчик, который из json-а пришедшего с сервера достает кол-во стульев и вставляет на страницу.

А вот с сервером беда: существует функция на сервере node
case('addChair')://фрагмент из кода, обрабатывающего запросы с клиента
    console.log('Добавление стула');
    //вставка стула в бд(некоторые подсобные части кода опущены) 
     var values = {//информация о стуле с базы данных}
            Database("INSERT INTO ?? SET ?", values , function(req){
         //..........
           res.end(//отвечаю на клиент что стул добавлен);
     });
  }
break;

(вызывается ajax-ом с клиента post запросом) - она добавляет новый стул в базу данных. Там все понятно.

Сейчас же пишу функцию для "онлайн"-отправки на клиент json с кол-вом стульев:

case '/getChairSumm':
 //...........
		console.log('запрос кол-ва стульев');
 //отправляем заголовок для открытия SSE на клиенте
		res.writeHead(200, {
			'Content-Type': 'text/event-stream; charset=utf-8',
			'Cache-Control': 'no-cache'
		});
//???тут хаос и поток сознания
	}
break;


пишу в заголовок ивент-стрим, клиент слушает response. Могу сразу-же ответить строкой с кол-вом стульев(сделав запрос в бд и отправив json с результатом на клиент где мой обработчик уже сам вставит на страницу обновленное кол-во стульев.
Но!!! Мне надо чтобы обновление стульев на странице происходило по завершению функции добавления стула(addChair выше по тексту). Т.е. нужно чтобы функция addChair вызывала метод(?) который запрашивает кол-во стульев и отправляет на клиент json. Проблема еще в том, что клиентов может быть несколько.

Я пробовал создавать объекты , в которых хранились request-ы. писал функцию, которая вызывалась после добавления стула (addChair), она в свою очередь вызывала методы объектов(эти методы отправляли ответы) с request-ами.()

И собственно вопрос: как реализовать такой алгоритм выдачи данных по событию на сервере? Я запутался окончательно. Вопрос отчасти глуп, ответ - "как как... руками" очевиден.

Хотел бы получить ваше видение решения проблемы в общих чертах(словесный алгоритм). Можно на платной основе.)) Спасибо что дочитали и ответили.
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы