Всем привет. Пишу веб-приложение в рамках АИС на предприятии. сервер 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-ами.()
И собственно вопрос: как реализовать такой алгоритм выдачи данных по событию на сервере? Я запутался окончательно. Вопрос отчасти глуп, ответ - "как как... руками" очевиден.
Хотел бы получить ваше видение решения проблемы в общих чертах(словесный алгоритм). Можно на платной основе.)) Спасибо что дочитали и ответили.