React.js - 实现Socket.io / Hapi.js

时间:2016-09-02 09:45:27

标签: javascript node.js reactjs socket.io hapijs

我正在尝试与我的React和Hapi.js服务器建立套接字连接。

这是我到目前为止所做的:

Index.js(Hapi调用):

var Hapi = require('hapi');
io = require("socket.io")(server.listener);
server.connection({port: config.server.port});
...

反应组件:

componentDidMount: function () {     
socket.on('passat', function (data) {console(data.somedata)});
},

在我的一个控制器中。我想发出' passat'事件次数,以便反应组件可以显示它。

我正在敲打我的脑袋如何在我的控制器中实现这样的东西:

  io.on('connection', function (socket) {
    socket.emit('passat',{
     somedata: "data"
    });
});

我试过这个(其中一个控制器):

 ...
 this.distance = options.distance;
 this.linkage = options.linkage;
 this.version = options.version;
 dispatchSocketMessage("message");
 //more code below
 }

function dispatchSocketMessage(msg) {
    io.on('connection', function (socket) {
       socket.emit('passat',{somedata: msg});
   });
}

该事件永远不会被解雇。 如果我试试这个:

this.distance = options.distance;
this.linkage = options.linkage;
this.version = options.version;
io.on('connection', function (socket) {
   socket.emit('passat',{somedata: msg});
});

然后它可以工作,但只有在我重新加载页面时才会有效。

我需要有一个函数(或类似函数),我可以多次触发事件,以便反应组件能够捕获它。

我得到了它的工作: Index.js

io = require("socket.io")(server.listener);
  io.on('connection', function (socket) {
  global = function (val) {
   console.log(val)
   socket.emit('passat', val)};
 });

在我的控制器中,我将它用作:

global({
            type: 'success',
            message: "Task 1 of 2: DATA PREPARATION...",
            totalObjects: length,
            iterations: i,
            testMessage: "Message is a test one"
        });

这有效,但我正在使用全局变量。我想避免它。 如何将其附加到request.server.XXXXX 这样我可以使用请求对象在我的控制器中调用它吗?

0 个答案:

没有答案