Использование socket.ui для отправки сообщения в c комнат ничего не делает - PullRequest
0 голосов
/ 05 апреля 2020

В моем приложении реакции я установил соединение с определенной c комнатой на основе параметра roomId:

componentDidMount() {
    const roomId = window.location.search.replace('?roomId=', '');
    this.setState({ roomId });
    this.socket = io();
    if (!this.socket.socket) {
        this.socket.connect();
    }

    this.socket.on('connect', () => {
        console.log(this.state.roomId);

        this.socket.emit('room', this.state.roomId);
    });

    this.socket.on('message', this.handleMessage)
}

Теперь на моем сервере. js Я присоединяюсь и слушаю сообщения, подобные this:

io.on('connection', socket => {
    socket.on('room', function(room) {
        socket.join(room);
    });
    socket.on('message', function(data) {
        socket.to(data.roomId).emit(data);
    });
});

Но когда я отправляю сообщение, другое окно браузера, подключенное к той же самой комнате, не получает никаких сообщений:

const message = {
    roomId: this.state.roomId,
    value: this.state.field,
};
this.socket.emit('message', message);

Я слушаю сообщения, подобные этому: this.socket.on('message', this.handleMessage), где handleMessage просто устанавливает состояние с новым сообщением.

Может кто-нибудь увидеть, почему нет?

ОБНОВЛЕНИЕ: Вот еще код, чтобы увидеть: https://jsbin.com/pakeyavefo/edit?html, js, выход

1 Ответ

1 голос
/ 05 апреля 2020

Когда вы делаете это:

socket.to(data.roomId).emit(data);

Вам необходимо отправить как имя сообщения, так и некоторые данные. Вы не отправляете имя сообщения, поэтому это событие (если оно даже будет отправлено) не будет соответствовать ни одному из прослушивателей на клиенте. Возможно, это должно быть:

socket.to(data.roomId).emit('message', data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...