2014-11-12 16 views
5

ho imparato un po 'da questa pagina ->https://github.com/Automattic/socket.io/issues/1846socket.io errore - connessione socket Web viene chiuso prima che la connessione viene stabilita

Devo SSL per prese a lavorare?

enter image description here

ho lottato con questo errore per un lungo periodo senza la soluzione fino ad ora, posso eventuali geni là fuori per risolvere il puzzle?

Codice My App

var express = require("express"); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.use(express.static(__dirname + '/html')); 

http.listen(process.env.PORT || 3000, function(){ 
    console.log('listening on *:', process.env.PORT || 3000); 
    new shell.Shell(app, io); 
}); 


app.use(function(request, response, next){ 
     response.header("Access-Control-Allow-Origin", "*"); 
     response.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); 
     response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token"); 
     request.id = self.id++; 
     next(); 
    }); 

    var self = this; 

    app.get("/", function(request, response) { 
     response.end(""); 
    }); 

    app.get("/entitlement/:uri", function(request, response){ 
     self.delegate.entitlement(request, response); 
    }); 

    app.get("/speakers", function(request, response) { 
     self.delegate.speaker(request, response); 
    }); 

    app.get("/speakers/:id", function(request, response) { 
     self.delegate.speaker(request, response); 
    }); 

    app.get("/sponsors", function(request, response){ 
     self.delegate.sponsor(request, response); 
    }); 

    app.get("/sponsors/:id", function(request, response) { 
     self.delegate.sponsor(request, response); 
    }); 

    app.get("/agendas", function(request, response) { 
     self.delegate.agenda(request, response); 
    }); 

    app.get("/agendas/:id", function(request, response) { 
     self.delegate.agenda(request, response); 
    }); 

    app.get("/sessions/:id", function(request, response){ 
     self.delegate.agenda(request, response); 
    }); 

    app.get("/attendees", function(request, response) { 
     //self.delegate.attendee(request, response);  
    }); 

    ///attendees/:id to get chat history 

    io.on("connection", function(socket){ 

     //self.delegate.connection(io, socket, null); 

     socket.on('get-age-in-dog-years', function(data, fn) { 
      console.log(data); 
      fn(data.age * 7) ; 
     }); 

     socket.on("chat", function(chat){ 
      //self.delegate.chat(io, socket, chat); 
     }); 

     socket.on("disconnect", function(){ 
      //self.delegate.disconnect(io, socket) 
     }); 
    }); 
}, 
+0

Questa è una richiesta errata 400 errore. Sembra che il client si aspetti una connessione web-socket e l'aggiornamento dell'handshake potrebbe non avvenire. Puoi fare un tcpdump e vedere l'handshake ws – spicyramen

+1

ho commentato poche righe di codice e ha funzionato, quelle linee includono roba middleware app.use (header related), anche eliminata node_modules e reinstallata con save, (pensavo funzionasse su localhost), Proverò a riprodurre l'errore – user2727195

risposta

1

Si potrebbe essere allegando socket.io per l'oggetto sbagliato sul lato server. L'oggetto http non è necessario quando si utilizza express. puoi allegarlo direttamente all'app express? Vedi qui:

http://socket.io/docs/#using-with-the-express-framework

var io = require('socket.io')(app) 

che potrebbero essere dando un riferimento non corretto per la vostra applicazione da allegare al.

+0

Credo che abbia configurato correttamente per Express 4. – gkiely

0

L'inizializzazione per Express & Socket.io sembra essere corretta. Il server che stai utilizzando supporta WebSockets? Questo errore sembra essere uno che afferma che non è stato possibile stabilire una connessione WebSocket.

Socket.io stabilisce prima una connessione con Polling lungo e quindi tenterà di aggiornare quella connessione a una connessione WebSocket, se possibile. Sembra che non possa essere aggiornato, ma l'app potrebbe ancora funzionare. Hai confermato che il client non può emettere sul socket il socket e che il server non lo gestisce in modo appropriato?

Problemi correlati