使用socket.io,react.js和node.js进行实时通知

时间:2018-07-04 10:17:40

标签: javascript node.js reactjs sockets websocket

我正在使用react.jsnode.jsexpress.jssequelize开发游戏应用程序。

应用程序很简单,一个玩家挑战另一个玩家(活跃玩家),并在接受挑战后玩游戏。

我正在尝试使用socket.io创建一个通知系统,但是socket.emit()socket.on()的{​​{1}}下无法正常工作。我不知道这是怎么回事?

这是我的代码:

  

反应

在质询按钮单击上发送此质询请求:

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); }); 函数在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')方法之外,那么当我加载React组件时,我将在控制台获得结果。

但是,只要单击挑战按钮,我都希望得到这个结果。 我该如何实现?

1 个答案:

答案 0 :(得分:0)

是的,终于找到了解决方法。

我想在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

        });
    });