Bread09
@Bread09
Newonkiy

Как вытягивать данные из БД в реальном времени?

Мне нужно получать новые записи из БД (если что, я создаю веб-чат).

Я уже знаю про метод типа:
1) нужно сделать функцию, которая проверяет на наличие новых записей из базы данных каждую секунду. Но, я думаю, что этот метод будет грузить сервер и пк, если ещё какой-то другой способ который выводить новые данные в момент его создания!
Вот мой текущий код:

app.js
// Socket Connect
io.on('connection', function (socket) {
	console.log('Socket Run...')

	// Send sms
	socket.on('chat message', function(msg){

			let sql = `INSERT INTO myDB VALUES(${msg})`;
			db.query(sql, (err, result) => {
				if (err) throw err;
				console.log(result);
			})

		io.emit('chat message', msg);
	});

	// Disconnect
	socket.on('disconnect', function(){
		console.log('Socket STOP!');
	});
});


chat.html
$(function () {
		var socket = io();

		$('form').submit((e) => {
	      e.preventDefault();
	      socket.emit('chat message', $('.m').val());
	      $('.m').val('');
	      return false;
	    });

	    socket.on('chat message', function(msg){
	    	$('.sms').append($('<li>').text(msg));
	    });
	  });
  • Вопрос задан
  • 1404 просмотра
Решения вопроса 1
@EvgeniiR
https://github.com/EvgeniiR
сделать функцию которая проверяет на наличие новых записей из БД каждую секунды. Но я думаю что этот метот будет грузить сервер и пк. если ещё какой-то другой способ который выводить новые данные в момент его создания.

Да, и он описан прямо в вашем тексте выше. Не ходите в БД в цикле, а реагируйте на приходящие через вебсокет сообщения.
То есть, сначала записали в БД, потом вызвали остальную логику/кинули ивент уровня приложения - любым способом.

spoiler
Слушать изменения в БД тоже можно, конечно, например через listen/notify+процедуры в pg, но явно не нужно. Пусть логика уровня приложения остаётся на уровне приложения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ski28
Я бы сделал другую логику. Зачем постоянно дергать mysql ? Mysql должен отдавать данные только один раз , при загрузки страницы. Остальные сообщения должны доставляться пользователям на прямую по socket.io . И уже на этом этапе , данные парально должны записываться в mysql.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
17 нояб. 2024, в 18:17
1500 руб./за проект
17 нояб. 2024, в 17:48
3000 руб./за проект