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
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!
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
Der endgültige Code:
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