Да, хотя это не тривиально.
лучший подход
Вы можете использовать длинный опрос (или «комету»), которая открывает соединение, держит его открытым в течение 20 с или около того, и сразу же открывает его снова. Сервер может отправлять что-либо в любое время.
Более новые браузеры предоставляют веб-сокеты, которые обеспечивают постоянные соединения.
Оба кода относительно сложны для кодирования, поэтому вам нужно какая-то структура , чтобы справиться с ситуацией за вас. Кроме того, соединение должно оставаться открытым для каждого пользователя, поэтому оно действительно работает только с чем-то легковесным, например NodeJS.
Более легкий подход
Если вы хотите что-то более простое в реализации, я бы порекомендовал проверять наличие обновлений, как вы предлагали (это называется короткий опрос, чтобы сравнить его с длинными опросами / веб-сокетами). Вы можете сделать простое решение для опроса, например, так:
window.setInterval(function () {
// More lightweight than $.post
$.get('/datasource', function () {
/* do something */
});
}, 3000);
3-секундные интервалы ранее использовались высокопоставленными людьми .
Если что-то идет медленно, попробуйте профилировать запросы к базе данных в / datasource