socket.io отправляет данные всякий раз, когда база данных обновляется

Я пишу веб-сокет-приложение, которое должно передавать данные в мой php-файл всякий раз, когда изменяется запись в базе данных. Прямо сейчас, в качестве базового начала, я установил интервальный таймер и отправляю каждые 20 секунд клиенту, независимо от того, было ли изменение или нет (поля предназначены только для игры — пароль …):

ServerSide:

setInterval(pushData, 20000);

function pushData() {
connection.query('SELECT * FROM testtable WHERE username="michael"', function(err,rows,fields) {
if (err) throw err;
io.emit('newdata', rows[0].password);

});
}

КЛИЕНТ PHP SCRIPT:

socket.on('newdata', function(msg) {
var data = document.getElementById('dataentries');
data.innerHTML = msg;
});

Каков наилучший подход для запроса и обновления только в случае изменения записи в БД? Могу ли я установить триггер из mysql в node.js?

2

Решение

Самый простой и законный способ сделать это — сначала запросить данные, проверить, изменились ли они, затем внести изменения и отправить сообщение клиенту. Если это не изменилось, не делайте обновления.

2

Другие решения

Предполагая, что вы используете ORM в вашем серверном приложении — я бы поместил логику вещания в POST_SAVE крюк.

Если вы не являетесь владельцем приложения, но имеете доступ к конфигурации базы данных — вот хитрость.

  1. Включите ведение журнала запросов (рассмотрите возможное снижение производительности, поэтому, вероятно, я бы настроил его на экземпляре реплики)
  2. В вашем скрипте просмотрите файл журнала на предмет изменений, возможно, проанализируйте его при изменении, чтобы проверить, какая таблица была обновлена ​​и т. Д.
  3. Основываясь на логике выше — трансляция событий
1

По вопросам рекламы [email protected]