У меня есть реализация socket.io с использованием express, которая должна (а) выбрать содержимое формы (клиент браузера) (б) отправить его на сервер node.js для обработки в реальном времени (c) и ответьте браузеру с результатами.
Хотя это работает, на шаге a и b возникает проблема, заключающаяся в том, что при обновлении страницы клиент отключается и подключает afre sh (нормально, как и ожидалось). но теперь для каждого события повторяется трафик клиент / сервер c.
Это видно в журналах сервера.
Например, когда ссылка sh выполняется 4 раза, сообщение повторяется 4 раза:
client 'Cu-7Yoav4rkMfWu-AAAE' connected
overall, 1 clients are connected
client says howdy!
client says howdy!
client says howdy!
client says howdy!
То же самое происходит на стороне клиента.
Как с этим бороться?
код сервера: ' bin / www*1019*'
global.io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log(`client '${socket.id}' connected`);
console.log(`overall, ${io.engine.clientsCount} clients are connected`);
socket.on('disconnect', () => {
console.log(`client '${socket.id}' disconnected`);
});
});
' индекс. js'
router.get('/', function(req, res, next) {
io.on('connection', (socket) => {
socket.emit('chatty', 'server says howdy!');
socket.on('chatty', (msg) => {
console.log(`${msg}`);
});
socket.on('form data', (formData) => {
console.log('formData: \n' + formData);
});
});
res.render('index', { title: 'index' });
});
код клиента:
<form class="form">
<textarea class="form-input" id="data-here" onchange="dataTransfer()"></textarea>
</form>
<script>
var socket = io();
socket.emit('chatty', 'client says howdy!');
function dataTransfer() {
socket.emit('form data', document.getElementById('data-here').value);
}
socket.on('chatty', (msg) => {
console.log(`${msg}`);
});
</script>