Socket.io: Nodejs Socket.io Express n'a pas réussi à établir de liaison après avoir appelé l'API HTTP

Créé le 19 nov. 2017  ·  2Commentaires  ·  Source: socketio/socket.io

Tu veux:

  • [x] signaler un bogue

Comportement actuel

J'utilise SocketIo avec Nodejs , Express server et MongoDB , j'ai suivi la documentation . cela fonctionne très bien lors de la connexion de plusieurs clients, ils peuvent s'envoyer des messages sans aucun problème. lorsque j'ai fait une demande Http, je ne peux pas connecter de nouveaux clients et obtenir cette erreur.

socket.io.js:7370 connexion WebSocket à
'ws:// localhost:28232/socket.io/?userId=userAmr&EIO=3&transport=websocket&sid=wNTTgrUD-PSeNaIcAAAF '
échec : erreur lors de la négociation WebSocket : code de réponse inattendu :
400

les autres utilisateurs connectés avant la requête Http peuvent continuer à envoyer des messages sans aucun problème.

J'ai débogué la bibliothèque Socket et trouvé la demande de socket client aller à la fonction de connexion puis déclencher errorCode:1

C'est mon 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);
        });
});

C'est ma question sur le débordement de la pile https://stackoverflow.com/q/47375814/6786941

Commentaire le plus utile

J'ai trouvé le problème, le package express-status-monitor faisait ce mauvais comportement.

essayez de l'enlever, et cela fonctionnera parfaitement

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

Le code final :

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

C'est ma question sur le débordement de la pile https://stackoverflow.com/q/47375814/6786941

C'est ma réponse sur le débordement de la pile https://stackoverflow.com/a/47411701/6786941

Tous les 2 commentaires

J'ai trouvé le problème, le package express-status-monitor faisait ce mauvais comportement.

essayez de l'enlever, et cela fonctionnera parfaitement

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

Le code final :

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

C'est ma question sur le débordement de la pile https://stackoverflow.com/q/47375814/6786941

C'est ma réponse sur le débordement de la pile https://stackoverflow.com/a/47411701/6786941

@almgwary Vous, monsieur, êtes trop bon. J'étais confronté exactement au même problème. J'ai supprimé expressStatusMonitor et cela a fonctionné à merveille ! Merci! Après plusieurs jours de recherche, j'ai enfin pu résoudre ce problème après avoir utilisé votre suggestion. Merci beaucoup!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Elliot9 picture Elliot9  ·  4Commentaires

karmac2015 picture karmac2015  ·  3Commentaires

varHarrie picture varHarrie  ·  3Commentaires

stnwk picture stnwk  ·  4Commentaires

adammw picture adammw  ·  4Commentaires