@nurdus

Почему socket.emit работает не так как ожидается?

Доброго времени суток.
Есть тестовый пример:
// server.js
// ...
let io = require('socket.io');
io = io(expressServer);
io = io.listen(expressServer);
io.on('connection', function (socket) {
  socket.on('message', function (data) {
    //socket.broadcast.emit('message', data); // (1)
    socket.emit('message', data); // (2)
    console.log(data);
  });
});

// client.js
// ...
let chat = io.connect(config.wssHost);
chat.on('connect', function() {
	chat.on('message', function(message){
        console.log(message);
    });	            
});
// отправка происходит так (полный код не буду приводить): 
chat.emit('message', chatMessage);


(1) - работает корректно, отправляя ответ всем кроме клиента, который отправил 'message'.
(2) - работает НЕ корректно, отправляя ответ только самому себе.
Вопрос: почему?!
  • Вопрос задан
  • 736 просмотров
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
const chat = io.connect(config.wssHost);

// Иначе при переподключении будут дублироваться
chat.on('connect', function() {
  console.log('Connected');
});


chat.on('message', function(message){
  console.log(message);
});

А во вторых на сервере нужно отправлять не текущему сокету, а всем.
io.on('connection', function (socket) {
  socket.on('message', function (data) {
    //socket.broadcast.emit('message', data); // (1)
    console.log(data);
    io.sockets.emit('message', data);
  });
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы