Можно использовать классический long polling
Принцип такой:
В таблице где у тебя обновляются, добавляются данные должно быть поле что-то типо updateTime (время последнего обновления) Если запись создаётся то updateTime = createTime.
Для реализации long polling нужно чтоб сервер не отправлял ответ пока не пройдет timeout(В среднем 5-15сек) или не появятся новые данные.
Пример реализации на nodejs
function subscribe(req,res,params,callback){
var timeStamp;
if (params.timestamp){ // Если передали timestamp c которого начинать выборку данных
timeStamp = new Date(parseInt(params.timestamp));
}else{
timeStamp = new Date();
}
var isConnected = true;
req.on('close', function() { // Если пользователь закрыл соединение
isConnected = false;
});
console.log("timeStamp",timeStamp);
(function startEvents(cb,time){
if (!isConnected){
console.log("Connection close_end pool");
return;
}
model.db.find({}).sort({updateTime :-1}).exec(function (err,items){ // SELECT * FROM datatable ORDER BY updateTime DESC
if (items.length>0){
cb(null,{
items:items,
timestamp:new Date(items[0].updateTime).getTime() // Возвращаем время для следующего соединения
});
}else {
if (time > 10) {
cb(null, {
items:[],
timestamp:new Date().getTime() // Возвращаем время для следующего соединения
});
} else {
setTimeout(function (){
startEvents(rQuery, group, cb, time + 1);
},1000);
}
}
});
})(callback,0)
}
Первый запрос будет примерно такой:
localhost:8080/controller/subscribe
{items:[],timestamp:1634803048151} // Если ничего не изменилось
{items:[1,2,3,4,5],timestamp:1634803048151} // Если что-то изменилось
Следующий запрос будет
localhost:8080/controller/subscribe?timestamp=1634...
И так до бесконечности