【问题标题】:node.js socket.io listener not working correctlynode.js socket.io 侦听器无法正常工作
【发布时间】:2017-05-04 18:58:00
【问题描述】:

我与私信聊天,但私信不起作用。 这是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 握手期间出错:“连接”标头值必须包含“升级”

我该如何解决这一切?

提前致谢!

【问题讨论】:

  • 你在Node前面使用代理了吗?错误`'Connection' header value must contain 'Upgrade'`表示你有Apache/Nginx/etc。在 Node 前面,它没有为 websockets 设置适当的标头
  • 我在 Plesk Onyx 中安装了 Nginx。我该如何配置?
  • 阅读本文的“虚拟主机配置”部分:nginx.com/blog/nginx-nodejs-websockets-socketio
  • nginx 没有在我的服务器上运行。其他原因?

标签: javascript ios node.js sockets


【解决方案1】:

好的,问题出在这部分:

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

现在可以正常使用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2013-03-14
    • 2017-06-08
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多