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/ –