2017-05-04 3 views
0

Ich habe einen Chat mit der privaten Nachricht, aber die private Nachricht funktioniert nicht. Dies ist die app.jsnode.js socket.io Listener funktioniert nicht richtig

var express = require('express'),http = require('http'); 
 
var app = express(); 
 
var server = http.createServer(app); 
 
console.log("Hola"); 
 
app.set('views',__dirname + '/views'); 
 

 
\t app.use(express.static(__dirname)); 
 

 
app.get('/',function(req,res){ 
 
\t res.render('index.jade',{layout:false}); 
 
}); 
 
app.post('/', function(req, res) { 
 
    if (req.session.logged) 
 
    { 
 
    \t res.send('Welcome back!'); 
 
    \t console.log("Welcome back!"); 
 
    } 
 
    else 
 
    { 
 
     req.session.logged = true; 
 
     res.send('Welcome!'); 
 
     console.log("Welcome"); 
 
    } 
 
}); 
 
server.listen(1080); 
 

 
function tstamp() { 
 
    var currentTime = new Date(); 
 
    var days = new Array('Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'); 
 
    var day = currentTime.getDay(); 
 
    var hours = currentTime.getHours(); 
 
    var minutes = currentTime.getMinutes(); 
 
    if (minutes < 10) { 
 
    minutes = "0" + minutes; 
 
    } 
 
    if (hours > 11) { 
 
    var ap = 'p'; 
 
    } 
 
    else { 
 
    var ap = 'a'; 
 
    } 
 
    if (hours > 12) { 
 
    hours = hours - 12; 
 
    } 
 

 
    return "["+ days[day] + " " + hours + ":" + minutes + ap + "m] "; 
 
} 
 

 
//websockets 
 
var io = require('socket.io').listen(server); 
 
var usuariosConectados = {}; 
 
var usuariosId ={}; 
 
io.sockets.on('connection',function(socket){ 
 
\t socket.on('enviarNombre',function(dato){ 
 
\t \t if(usuariosConectados[dato]) 
 
\t \t \t socket.emit('errorName'); 
 
\t \t else 
 
\t \t \t { 
 
\t \t \t \t // store the nickname in the socket session for this client 
 
\t \t \t \t socket.nickname = dato; 
 
\t \t \t \t //console.log("El usuario es: " + dato); 
 
\t \t \t \t usuariosConectados[dato] = socket.nickname; 
 
\t \t \t \t usuariosId[dato] = socket.id; 
 
\t \t \t } 
 
\t \t \t sId = [dato,usuariosId]; 
 
\t \t \t data = [dato,usuariosConectados]; 
 
\t \t \t io.sockets.emit('mensaje',data); 
 
\t }); 
 
\t socket.on('enviarMensaje',function(mensaje){ 
 
\t \t var data = [socket.nickname, mensaje]; 
 
\t \t io.sockets.emit('newMessage',data); 
 
\t }); 
 
\t socket.on('mensajePrivado',function(targetUser,msg) { 
 
\t \t //console.log(sId[1][targetUser]); 
 
\t \t //console.log(msg); 
 
\t \t //console.log(socket.id); 
 
\t \t console.log(tstamp()); 
 
     io.sockets.socket(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg); 
 
     io.sockets.socket(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg); 
 
    }); 
 
\t socket.on('disconnect',function(){ 
 
\t \t console.log("Entro a disconnect"); 
 
\t \t delete usuariosConectados[socket.nickname]; 
 
\t \t data = [usuariosConectados,socket.nickname]; 
 
\t \t io.sockets.emit('usuarioDesconectado',data); 
 
\t }); 
 
});

Das Problem ist, wenn ich den Hörer verwenden „mensajePrivado“ es nie um dorthin zu gelangen und ich weiß nicht, warum. Der Hörer von socket.on ('enviarMensaje') funktioniert einwandfrei.

ich es so nennen:

function sendPrivateMessage (targetUser) 
 
{ 
 
\t console.log("entro en sendPrivateMessage"); 
 
\t var privateMsg = $('#'+ targetUser + 'privateMsg').val(); 
 
\t //verificamos que no tenga scripts 
 
\t if((privateMsg.indexOf("<") != -1)) 
 
\t { 
 
\t \t alert("Mensaje incorrecto"); 
 
\t } 
 
\t else if((privateMsg.indexOf(">") != -1)) 
 
\t { 
 
\t \t alert("Mensaje incorrecto"); 
 
\t } 
 
\t else if((privateMsg.indexOf(";") != -1)) 
 
\t { 
 
\t \t alert("Mensaje incorrecto"); 
 
\t } 
 
\t else 
 
\t { 
 
\t \t $('#'+ targetUser + 'privateMsg').val(""); 
 
\t \t console.log(privateMsg); 
 
\t \t console.log(targetUser); 
 
\t \t websocket.emit('mensajePrivado', targetUser, privateMsg); 
 
\t } 
 
}

Auch wenn ich Elemente in den Chrome-Browser überprüfen ich die folgende Fehlermeldung erhalten
fehlgeschlagen: Fehler bei der WebSocket-Handshake: 'Verbindung' header Wert muss "Upgrade" enthalten

Wie kann ich das alles beheben?

Vielen Dank im Voraus!

+0

Verwenden Sie einen Proxy vor Node? Der Fehler "Connection" Header-Wert muss "Upgrade" enthalten bedeutet, dass Sie Apache/Nginx/etc haben. vor Node und es setzt nicht die entsprechenden Header für WebSockets –

+0

Ich habe Nginx in einem Plesk Onyx. Wie kann ich das konfigurieren? – user995691

+0

Lesen Sie den "Virtual Host Configuration" Teil dieses Artikels: https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/ –

Antwort

0

Ok war das Problem in diesem Teil:

io.sockets.socket(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg); 
    io.sockets.socket(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg); 

i mit diesem ersetzen:

io.to(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg); 
    io.to(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg); 

jetzt, es funktioniert!

Verwandte Themen