0
我与私人消息聊天,但私人消息无效。 这是app.jsnode.js socket.io监听器无法正常工作
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 });
});
问题是,当我使用监听器“mensajePrivado”它从来没有到那里,我不知道为什么。 socket.on('enviarMensaje')监听器工作正常。
我这样称呼它:
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 }
}
而且当我检查在Chrome浏览器中我得到以下错误
失败的元素:WebSocket的握手过程中的错误:“连接”头值必须包含'升级'
我该如何解决所有这些问题?
在此先感谢!
您是否在节点前使用代理?错误“Connection”标题值必须包含“Upgrade”表示你有Apache/Nginx/etc。在Node前面,它没有为websocket设置适当的头文件 –
我在Plesk Onyx中有Nginx。我如何配置? – user995691
阅读本文的“虚拟主机配置”部分:https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/ –