Socket.io: فشل Nodejs Socket.io Express في المصافحة بعد استدعاء HTTP API

تم إنشاؤها على ١٩ نوفمبر ٢٠١٧  ·  2تعليقات  ·  مصدر: socketio/socket.io

اتريد:

  • [x] أبلغ عن خطأ

السلوك الحالي

أنا أستخدم SocketIo مع Nodejs و Express server و MongoDB ، لقد اتبعت الوثائق. يعمل بشكل جيد عند توصيل عدة عملاء يمكنهم إرسال رسائل لبعضهم البعض دون أي مشكلة. عندما قدمت طلب Http ، لا يمكنني توصيل أي عملاء جدد والحصول على هذا الخطأ.

socket.io.js: 7370 اتصال WebSocket بـ
'ws: // localhost: 28232 / socket.io /؟ userId = userAmr & EIO = 3 & transport = websocket & sid = wNTTgrUD-PSeNaIcAAAF '
فشل: خطأ أثناء اتصال WebSocket: رمز استجابة غير متوقع:
400

يمكن للمستخدمين المتصلين الآخرين قبل طلب Http متابعة إرسال الرسائل دون أي مشكلة.

لقد قمت بتصحيح مكتبة Socket ووجدت أن طلب مقبس العميل ، انتقل إلى وظيفة الاتصال ثم أطلق خطأًالرمز: 1

هذا هو رمز بلدي

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

هذا سؤالي حول تجاوز سعة المكدس https://stackoverflow.com/q/47375814/6786941

التعليق الأكثر فائدة

لقد وجدت المشكلة ، الحزمة express-status-monitor كانت تصنع هذا السلوك الخاطئ.

حاول إزالته ، وسيعمل بشكل مثالي

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

الكود النهائي:

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

هذا سؤالي حول تجاوز سعة المكدس https://stackoverflow.com/q/47375814/6786941

هذه إجابتي على تجاوز المكدس https://stackoverflow.com/a/47411701/6786941

ال 2 كومينتر

لقد وجدت المشكلة ، الحزمة express-status-monitor كانت تصنع هذا السلوك الخاطئ.

حاول إزالته ، وسيعمل بشكل مثالي

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

الكود النهائي:

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

هذا سؤالي حول تجاوز سعة المكدس https://stackoverflow.com/q/47375814/6786941

هذه إجابتي على تجاوز المكدس https://stackoverflow.com/a/47411701/6786941

almgwary أنت يا سيدي جيد جدا. كنت أواجه نفس المشكلة بالضبط. لقد قمت بإزالة expressStatusMonitor وعمل مثل السحر! شكرا لك! بعد عدة أيام من البحث ، تمكنت أخيرًا من حل هذا بعد استخدام اقتراحك. شكرا جزيلا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات