繁体   English   中英

node.js socket.io侦听器无法正常工作

[英]node.js socket.io listener not working correctly

我与私人消息聊天,但私人消息无效。 这是app.js

 var express = require('express'),http = require('http'); var app = express(); var server = http.createServer(app); console.log("Hola"); app.set('views',__dirname + '/views'); app.use(express.static(__dirname)); app.get('/',function(req,res){ res.render('index.jade',{layout:false}); }); app.post('/', function(req, res) { if (req.session.logged) { res.send('Welcome back!'); 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){ socket.on('enviarNombre',function(dato){ if(usuariosConectados[dato]) socket.emit('errorName'); else { // store the nickname in the socket session for this client socket.nickname = dato; //console.log("El usuario es: " + dato); usuariosConectados[dato] = socket.nickname; usuariosId[dato] = socket.id; } sId = [dato,usuariosId]; data = [dato,usuariosConectados]; io.sockets.emit('mensaje',data); }); socket.on('enviarMensaje',function(mensaje){ var data = [socket.nickname, mensaje]; io.sockets.emit('newMessage',data); }); socket.on('mensajePrivado',function(targetUser,msg) { //console.log(sId[1][targetUser]); //console.log(msg); //console.log(socket.id); 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); }); socket.on('disconnect',function(){ console.log("Entro a disconnect"); delete usuariosConectados[socket.nickname]; data = [usuariosConectados,socket.nickname]; io.sockets.emit('usuarioDesconectado',data); }); }); 

问题是当我使用侦听器“ mensajePrivado”时,它永远不会到达那里,我也不知道为什么。 socket.on('enviarMensaje')侦听器工作正常。

我这样称呼它:

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

另外,当我检查Chrome浏览器中的元素时,也会出现以下错误
失败:WebSocket握手期间出错:“连接”标头值必须包含“升级”

我该如何解决所有这些问题?

提前致谢!

好的,问题出在这部分:

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);

我替换为:

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

现在工作正常!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM