evgeniy8705
@evgeniy8705
Повелитель вселенной

Почему сообщение не отправляется всем клиентам (socket.io)?

Логика такая: Клиенты подключаются. Один из клиентов нажимает представиться. Вводит свое имя. Данному клиенту выводится сообщение "Привет {{ Имя пользователя }}". Все остальные клиенты получают сообщение "Привет от {{ Имя пользователя }}".
Но при отправке сообщения (После того как клиент представится), его получает только последний подключенный клиент, хотя по идеи должны получать все кроме отправителя (broadcast).
В чем может быть проблема? И как ее решить?

А вот эта вот часть вообще не отрабатывает:
client.emit("hello", {
  hello: `Привет ${data}!`
});


// server.js
const app = require("express")();
const http = require("http").Server(app);
const io = require("socket.io")(http);

app.use(require("express").static(__dirname + "/public"));

io.on("connection", client => {
  client.on("message", data => {
    console.log(data);

    client.emit("hello", {
      hello: `Привет ${data}!`
    });

    client.broadcast.emit("hello", {
      hello: `Привет от ${data}!`
    });
  });
});

http.listen(3000);

// client.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <button>Представьтесь</button>

  <script>
    const socket = io.connect("http://localhost:3000");

    socket.on("hello", data => {
      alert(data.hello);
    });

    const button = document.querySelector("button");

    button.addEventListener("click", event => {
      const name = prompt("Как вас зовут?", "Гость");

      if (name) {
        socket.emit("message", name);
      }
    }, false);
  </script>
</body>
</html>
  • Вопрос задан
  • 459 просмотров
Пригласить эксперта
Ответы на вопрос 2
@de1m
У меня с broadcast тоже не работало, попробуйте так.
io.emit('writeModalConfigs', result);
Вот тут полностью пример
Ответ написан
@Abcdefgk
А попробуйте стереть
client.emit("hello", {
      hello: `Привет ${data}!`
    });

Право, я только что разбирался с системой "rooms & namespace" в socket.io - и оно, как оказалось, так замечательно там работает, что я теперь даже не верю, что у них там что-нибудь не работает.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы