Socket.io: Nodejs Socket.io Express gagal berjabat tangan setelah memanggil HTTP API

Dibuat pada 19 Nov 2017  ·  2Komentar  ·  Sumber: socketio/socket.io

Yang kamu ingin:

  • [x] laporkan bug

Perilaku saat ini

Saya menggunakan SocketIo dengan Nodejs , Express server dan MongoDB , saya mengikuti dokumentasi . itu berfungsi dengan baik saat menghubungkan beberapa klien, mereka dapat mengirim pesan satu sama lain tanpa masalah. ketika saya membuat permintaan Http, saya tidak dapat menghubungkan klien baru dan mendapatkan kesalahan ini.

socket.io.js:7370 Koneksi WebSocket ke
'ws:// localhost:28232/socket.io/?userId=userAmr&EIO=3&transport=websocket&sid=wNTTgrUD-PSeNaIcAAAF '
gagal: Kesalahan selama jabat tangan WebSocket: Kode respons tak terduga:
400

pengguna lain yang terhubung sebelum permintaan Http dapat terus mengirim pesan tanpa masalah.

Saya men-debug perpustakaan Socket dan menemukan permintaan soket klien pergi ke fungsi koneksi lalu nyalakan kode kesalahan: 1

Ini kode saya

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

Ini pertanyaan saya tentang stack overflow https://stackoverflow.com/q/47375814/6786941

Komentar yang paling membantu

saya menemukan masalah, paket express-status-monitor membuat perilaku yang salah ini.

coba hapus, dan itu akan bekerja dengan sempurna

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

Kode terakhir:

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

Ini pertanyaan saya tentang stack overflow https://stackoverflow.com/q/47375814/6786941

Ini jawaban saya tentang stack overflow https://stackoverflow.com/a/47411701/6786941

Semua 2 komentar

saya menemukan masalah, paket express-status-monitor membuat perilaku yang salah ini.

coba hapus, dan itu akan bekerja dengan sempurna

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

Kode terakhir:

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

Ini pertanyaan saya tentang stack overflow https://stackoverflow.com/q/47375814/6786941

Ini jawaban saya tentang stack overflow https://stackoverflow.com/a/47411701/6786941

@almgwary Anda, Pak, Apakah terlalu baik. Saya menghadapi masalah yang sama persis. Saya menghapus expressStatusMonitor dan itu berfungsi seperti pesona! Terima kasih! Setelah berhari-hari mencari, akhirnya saya bisa menyelesaikan ini setelah menggunakan saran Anda. Terima kasih banyak!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat