Невозможно отправить сообщение клиенту в nodejs с socket.io - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть 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 голосов
/ 07 февраля 2019

Вам необходимо отправить событие со стороны сервера на сторону клиента, а затем перехватить данные там

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)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...