socket.io трафик нескольких клиентов c при обновлении страницы - PullRequest
0 голосов
/ 14 июля 2020

У меня есть реализация 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...