无法使用socket.io

时间:2019-02-07 09:48:53

标签: javascript node.js express socket.io

我有2个页面:播放页面,实时页面和服务器。我想使用socket.io来做到这一点:我想将数据从播放页面发送到服务器,然后直播并显示在播放页面中进行更改时自动更新的文本。

播放页面发出此

var n = <%-JSON.stringify(v1)%>;
    var socket = io.connect('http://localhost:3000');
    socket.emit('event', { message: n });

服务器代码

var server = app.listen(3000);  //port 3000 is only for sockets. my app has web traffic on port 5000.
var io = require('socket.io')(server);

io.on('connection', function(socket) {  
    socket.on('event', function(data) {
        console.log('A client sent us this dumb message:', data.message);
        var n = data.message;
        console.log("");
        console.log("data received from play client..trying to send to live");
        console.log("");
        console.log("var n is");
        console.log(n);
        console.log("sending data...");
        socket.emit('event', { message: n });

无论我在实时页面中做什么,都不会收到消息。 我解决了50%的问题,在server.js中创建了另一个侦听端口3002的套接字,此方法有效。但是现在我的内容不会在实时页面上自动更新。我必须手动刷新,但我不希望这样做。

这是我的新server.js代码有效(在live.ejs页面上没有实时更新):

const express = require('express');

const store   = require('./store');
const storeLyric   = require('./storeLyric');
const searchF   = require('./search');
// middleware to handle HTTP POST request
// extract the entire body portion of an incoming request and exposes it on req.body
const bodyParser = require('body-parser');



const app = express();
app.set('port', (process.env.PORT || 5000));
app.set('view engine', 'ejs');
app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
///new

var server = app.listen(3000);  
var io = require('socket.io')(server);

var server2 = app.listen(3002);  
var io2 = require('socket.io')(server2);

io.on('connection', function(socket) {  
    socket.on('event', function(data) {
        console.log('A client sent us this dumb message:', data.message);
        var n = data.message;
        console.log("");
        console.log("data received from play client..trying to send to live");
        console.log("");
        console.log("var n is");
        console.log(n);
        console.log("sending data...");

io2.on('connection', function(socket2) {  
    socket2.on('live', function(data2) {
    console.log('status from live client:', data2);
    socket2.emit('live', n);
});
});


////////////////////

    });
});



//end new
////////////
// default page
app.get('/', (req,res) => {
    let students = [];
    var end = req.query.end;
    if(end==1 || end==2){
        io2.on('connection', function(socket2) {  
    socket2.on('live', function(data2) {
    console.log('status from live client:', data2);
    socket2.emit('live', '');
});
});
    }
    store.studentList().then((req,respond) => {
        students = req;

        res.render('pages/index', {
            title: '',
            students:students
        })
    })

})

//live page



app.get('/live', function (req, res) {
  res.render('pages/live', {
            n:'gsgs'

    })
})





// search page
app.get('/search', (req,res) => {
    let search = [];
    var q = req.query.q; // $_GET["q"]

    searchF.search(q).then((req,respond) => {
        search = req;

        res.render('pages/search', {
            search:search,
            q:q
        })
    })

})



// play page
app.get('/play', (req,res) => {



    let lyrics = [];

    var vers = req.query.vers; // $_GET["vers"]
    var for_id = req.query.for_id; // $_GET["vers"]

    storeLyric.lyrics(for_id, vers).then((req,respond) => {
        lyrics = req;

        res.render('pages/play', {
            title: '',
            lyrics:lyrics
        })
    });




////////


})

app.listen(app.get('port'), () => {
    console.log("Listening to port: ", app.get("port"))
});

我做错了什么,为什么socket.io无法实时工作? 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要将事件从服务器端发送到客户端,然后在其中捕获数据

var server = app.listen(3000);  
var io = require('socket.io')(server);


io.on('connection', function(socket) {  
  socket.on('event', function(data) {
    var n = data.message;
    io.sockets.emit('event', message);

});

然后在实时页面的前端上编写

var n = <%-JSON.stringify(v1)%>;
var socket = io.connect('http://localhost:3000');
socket.on('event', (data)=>{
     console.log(data)
});