أنا أستخدم 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
almgwary أنت يا سيدي جيد جدا. كنت أواجه نفس المشكلة بالضبط. لقد قمت بإزالة expressStatusMonitor وعمل مثل السحر! شكرا لك! بعد عدة أيام من البحث ، تمكنت أخيرًا من حل هذا بعد استخدام اقتراحك. شكرا جزيلا!
التعليق الأكثر فائدة
لقد وجدت المشكلة ، الحزمة
express-status-monitor
كانت تصنع هذا السلوك الخاطئ.حاول إزالته ، وسيعمل بشكل مثالي
الكود النهائي:
هذا سؤالي حول تجاوز سعة المكدس https://stackoverflow.com/q/47375814/6786941
هذه إجابتي على تجاوز المكدس https://stackoverflow.com/a/47411701/6786941