Уведомление в режиме реального времени с помощью socket.io, Reaction.js и node.js - PullRequest
0 голосов
/ 04 июля 2018

Я разрабатываю игровое приложение с react.js, node.js, express.js и sequelize.

Приложение простое: один игрок бросает вызов другому игроку (активным игрокам) и играет в игру после принятия вызова.

Я пытаюсь создать систему уведомлений с socket.io, но socket.emit() не работает под socket.on() в node.js. Я не знаю, что происходит?

Вот мой код:

Реагировать

Отправка запроса на вызов по нажатию кнопки вызова:

socket.emit('challenge request', { 
    player1_Name : localStorage.getItem('user-name'),
    player2 : response.data.data.player2_id,
    game : response.data.data.gameId,
    gameOption : response.data.data.gameOptionId,
    challengeStatus : response.data.data.challengeStatus
});     

и пытается получить это уведомление от node.js:

  socket.on("challenge-notify", function(data) {
    console.log("challenge Notify", data);
    helper(data.player1_Name,data.player2,data.game,data.gameOption);
  });  

Node

Здесь socket.emit('challenge-notify') функция не работает по методу socket.on('challenge request'):

    io.on('connection', function (socket) {
        socket.on('challenge request', function (challengeReq) {
          socket.emit('challenge-notify', { 
            player1_Name : challengeReq.player1_Name,
            player2 : challengeReq.player2,
            game : challengeReq.game,
            gameOption : challengeReq.gameOption,
            challengeStatus : challengeReq.challengeStatus
        });
    });
});

Если я поместил метод socket.emit('challenge-notify') вне моего метода socket.on('challenge request'), тогда я получу результат на консоли, когда нагрузка моего компонента реагирует.

Но я хочу получить этот результат всякий раз, когда нажимается кнопка вызова. Как мне этого добиться?

1 Ответ

0 голосов
/ 16 июля 2018

Да, наконец-то я нашел решение ..

Я хочу использовать socket.emit внутри socket.on, чтобы сделать это, я использовал io.sockets.emit метод, и он отлично работает.

socket.on('challenge request', function (challengeReq) {
        io.sockets.emit('challenge-notify', { 
            player1_Name : challengeReq.player1_Name,
            player1: challengeReq.player1,
            player2 : challengeReq.player2,
            game : challengeReq.game,
            gameOption : challengeReq.gameOption,
            challengeStatus : challengeReq.challengeStatus

        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...