SocketIO излучать всем клиентам не работает - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь заставить сервер socketIO работать на NodeJS с Typescript.Конкретное поведение, которое я хочу создать, заключается в том, что он будет отправлять сообщение во все подключенные сокеты (включая себя) каждые 1000 мс.

У меня работает базовый сокет, и когда клиенты подключают триггеры сообщения «on connect», то естьхорошо.

    this.io.on('connection', (socket: Socket)=>{
        console.log('a user connected');
    });

Так что теперь, чтобы отправить сообщение всем клиентам, я должен:

        this.io.emit("newTest","Test")

Затем прослушать это (на том же сервере, прямо под:)

    this.io.on("newTest",(socket:Socket)=>{
        console.log("Echoo")
    })

Но я никогда не получаю "эхо" при записи в консоль.На самом деле, я тоже слушаю клиента (приложение angular 6), и хотя это приложение, когда оно подключается, оно правильно отображает «пользователь подключен» ... (поэтому сокет работает) ... this.io.Кажется, что emit () на самом деле не отправляет сообщение.

Я МОГУ отправить сообщение, если сделаю:

    this.io.on('connection', (socket: Socket)=>{
        console.log('a user connected');

        socket.emit("newTest","test")
    });

, и это прекрасно работает.НО я не могу сделать this.io.emit () .. для отправки всем клиентам.Я мог бы вручную попытаться перехватить все объекты «сокетов» в массиве при их подключении, и затем всякий раз, когда я получаю сообщение, я перебираю их и выполняю socket.emit ... но должен быть лучший способ, чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Чтобы отправить сообщение всем подключенным клиентам, вы можете использовать io.sockets.emit (на сервере):

io.on('connection', (socket: Socket) => {
    console.log('a user connected');

    io.sockets.emit('newTest', 'test');
});

Подробнее об этом здесь и здесь.

0 голосов
/ 26 декабря 2018

Решил, проблема была на моей стороне.

Для записи.this.io.emit ("testMessage", mesagecontents)

Часть ошибки заключалась в том, что я думал, что сервер сам является клиентом.

РАБОТАЕТ.

0 голосов
/ 25 декабря 2018
 this.io.on("newTest",(socket:Socket)=>{
    console.log("Echoo")
})

Это серверный код?Это должен быть код на стороне клиента, чтобы прослушать отправку события всем клиентам.А чтобы получить излучение, вам необходимо сделать следующее:

socket.on("newTest",(socket:Socket)=>{
    console.log("Echoo")
})

Это код на стороне клиента.Может быть, это сработает.

...