nodejs脚本之间的socket.io通信

时间:2018-03-05 10:08:25

标签: node.js socket.io

我正在尝试设置一些socket.io通信,我的服务器(app.js)(在raspberry pi上运行)和网站(public / index.html)之间的通信正常。现在我想扩展它,所以当我的app.js收到来自index.html的调用时,它会将它进一步发送到另一个node.js脚本(bed.js),它将在另一个raspberry pi上运行。我试图使用npm模块socket.io-client,但这只能接收

!编辑!问题已缩小到setrgb部分,它不会发出。

!编辑2!当我收到setRGB时,我发出setRGBclient,但是只能在bed.js中收到,而不是在index.html中,有我的问题,我需要共享连接或强制它到另一个连接,不知道我是如何修复它的虽然

APP.JS:

let http = require('http').createServer(handler); //require http server, and create server with function handler()
let fs = require('fs'); //require filesystem module
let io = require('socket.io')(http) //require socket.io module and pass the http object (server)
let delay = require('delay');
console.log('Define each color from RGB Strip light.');
http.listen(8080); //listen to port 8080


function handler (req, res) { //create server
    fs.readFile(__dirname + '/public/index.html', function(err, data) { //read file index.html in public folder
        if (err) {
            res.writeHead(404, {'Content-Type': 'text/html'}); //display 404 on error
            return res.end("404 Not Found");
        }
        res.writeHead(200, {'Content-Type': 'text/html'}); //write HTML
        res.write(data); //write data from index.html
        return res.end();
    });
}
io.sockets.on('connection', function (socket) {// WebSocket Connection

    socket.on("test", function(){
        console.log("sampletext");
    });


    socket.on("setRGB", function(data){
        socket.emit("setRGBClient", data);
        console.log(data);
        console.log("test");
    });
});

bed.js:

let socket = require('socket.io-client')('http://localhost:8080');

let lightstate = false;
let stayOff = false;
let fadeState = false;
console.log("check");
socket.emit("test");
socket.on("setRGBClient" ,function(data) {
    console.log(data);
});

3 个答案:

答案 0 :(得分:2)

我可以播放setRGBClient。

   socket.broadcast.emit("setRGBClient", data);

答案 1 :(得分:0)

我想这是一次学习练习。否则我会对socket.io警告这些应用程序。

但是我只能看到'setRGB'的订阅而不是emit-part。

答案 2 :(得分:0)

就这个“当我收到setRGB时,我发出setRGBclient,但只能在bed.js中收到,而不是在index.html中,这就产生了我的问题,我需要共享连接或强制它到另一个连接,不知道我如何修复它虽然“关注然后,我建议尝试在index.html和bed.js 共享相同的套接字,或者通过在index.html中创建一个套接字并传入它bed.js通过一些函数或在bed.js中创建一个套接字通过索引中的函数返回它,然后在两个文件中的监听器上返回它。因为同一个套接字上发送的数据需要在两个文件中被监听。 我在为我工作的mocha脚本时尝试过这个。