首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js socket.io侦听器未正常工作

node.js socket.io侦听器未正常工作
EN

Stack Overflow用户
提问于 2017-05-05 02:58:01
回答 1查看 515关注 0票数 0

我用私信聊天,但私信不起作用。这是app.js

代码语言:javascript
复制
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')侦听器工作正常。

我这样称呼它:

代码语言:javascript
复制
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握手期间出错:'Connection‘标头值必须包含'Upgrade’

我怎么才能修复这一切呢?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-05-05 06:42:18

好的,问题出在这个部分:

代码语言:javascript
复制
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);

我将其替换为:

代码语言:javascript
复制
io.to(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg);
    io.to(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg);

现在它工作得很好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43790806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档