Socket.io: Nodejs Socket.io Express konnte nach dem Aufrufen der HTTP-API keinen Handshake durchführen

Erstellt am 19. Nov. 2017  ·  2Kommentare  ·  Quelle: socketio/socket.io

Du möchtest:

  • [x] einen Fehler melden

Aktuelles Verhalten

Ich verwende SocketIo mit Nodejs , Express Server und MongoDB , ich habe die Dokumentation befolgt . es funktioniert gut , wenn mehrere Clients verbunden werden , können sie ohne Probleme Nachrichten aneinander senden . Wenn ich eine HTTP-Anfrage gestellt habe, kann ich keine neuen Clients verbinden und erhalte diese Fehlermeldung.

socket.io.js: 7370 WebSocket-Verbindung zu
'ws:// localhost:28232/socket.io/?userId=userAmr&EIO=3&transport=websocket&sid=wNTTgrUD-PSeNaIcAAAF '
fehlgeschlagen: Fehler beim WebSocket-Handshake: Unerwarteter Antwortcode:
400

die anderen verbundenen Benutzer vor der Http-Anfrage können ohne Probleme mit dem Senden von Nachrichten fortfahren.

Ich habe die Socket-Bibliothek debuggt und festgestellt, dass die Client-Socket-Anforderung zur Verbindungsfunktion geht und dann errorCode:1 ausgelöst wird

Das ist mein Code

/**
 * Create Express server.
 */
const app = express();


// API endpoint
app.get('/api/test',(req,res)=>{
    res.status(200).send({test:"test"});
});



/**
 * Init socket
 */
const server = require('http').Server(app);
const io = require('socket.io')(server);


io.on('connection', (socket) => {

        // emit message to group
        socket.on('emitMessage', (data, callback) => {
                io.emit('emitMessage', data);
        });
});

Dies ist meine Frage zum Stapelüberlauf https://stackoverflow.com/q/47375814/6786941

Hilfreichster Kommentar

Ich habe das Problem gefunden, das Paket express-status-monitor machte dieses falsche Verhalten.

Versuchen Sie es zu entfernen, und es wird perfekt funktionieren

 // comment these lines, as they making the issue
 // const expressStatusMonitor = require('express-status-monitor'); 
 // app.use(expressStatusMonitor());

Der endgültige Code:

let app = require('express')();

// these two lines were making the problem, please comment them. if you want to reproduce the problem enable them again 
// const expressStatusMonitor = require('express-status-monitor');
// app.use(expressStatusMonitor());

let http = require('http').Server(app);
let io = require('socket.io')(http);
let port = process.env.PORT || 3000;

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});



app.get('/api/v0/availabilities',(req,res)=>{
    res.status(200).send({test:"test"});
});


io.on('connection', (socket) => {

    // emit message to group
    socket.on('emitMessage', (data) => {
        io.emit('emitMessage', data);
    });
});

http.listen(port, function(){
    console.log('listening on *:' + port);
});

Dies ist meine Frage zum Stapelüberlauf https://stackoverflow.com/q/47375814/6786941

Dies ist meine Antwort auf Stapelüberlauf https://stackoverflow.com/a/47411701/6786941

Alle 2 Kommentare

Ich habe das Problem gefunden, das Paket express-status-monitor machte dieses falsche Verhalten.

Versuchen Sie es zu entfernen, und es wird perfekt funktionieren

 // comment these lines, as they making the issue
 // const expressStatusMonitor = require('express-status-monitor'); 
 // app.use(expressStatusMonitor());

Der endgültige Code:

let app = require('express')();

// these two lines were making the problem, please comment them. if you want to reproduce the problem enable them again 
// const expressStatusMonitor = require('express-status-monitor');
// app.use(expressStatusMonitor());

let http = require('http').Server(app);
let io = require('socket.io')(http);
let port = process.env.PORT || 3000;

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});



app.get('/api/v0/availabilities',(req,res)=>{
    res.status(200).send({test:"test"});
});


io.on('connection', (socket) => {

    // emit message to group
    socket.on('emitMessage', (data) => {
        io.emit('emitMessage', data);
    });
});

http.listen(port, function(){
    console.log('listening on *:' + port);
});

Dies ist meine Frage zum Stapelüberlauf https://stackoverflow.com/q/47375814/6786941

Dies ist meine Antwort auf Stapelüberlauf https://stackoverflow.com/a/47411701/6786941

@almgwary Sie, Sir, sind zu gut. Ich stand genau vor dem gleichen Problem. Ich habe expressStatusMonitor entfernt und es funktionierte wie ein Zauber! Dankeschön! Nach vielen Tagen der Suche konnte ich das Problem endlich lösen, nachdem ich Ihren Vorschlag verwendet hatte. Danke vielmals!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen