我正在尝试与我的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 这样我可以使用请求对象在我的控制器中调用它吗?