ฉันใช้แอพพลิเคชั่น Express.js โดยใช้ Socket.io สำหรับเว็บแชทและฉันได้รับข้อผิดพลาดต่อไปนี้แบบสุ่มประมาณ 5 ครั้งในช่วง 24 ชั่วโมง กระบวนการโหนดถูกห่อในตลอดไปและจะรีสตาร์ทเองทันที
ปัญหาคือการรีสตาร์ท Express ทำให้ผู้ใช้ของฉันออกจากห้องและไม่มีใครต้องการมัน
เว็บเซิร์ฟเวอร์ถูกพร็อกซีโดย HAProxy ไม่มีปัญหาเรื่องความเสถียรของซ็อกเก็ตเพียงแค่ใช้การถ่ายโอนเว็บและซ็อกเก็ตแฟลช ฉันไม่สามารถทำซ้ำสิ่งนี้โดยเจตนา
นี่เป็นข้อผิดพลาดกับโหนดv0.10.11:
    events.js:72
            throw er; // Unhandled 'error' event
                  ^
    Error: read ECONNRESET     //alternatively it s a 'write'
        at errnoException (net.js:900:11)
        at TCP.onread (net.js:555:19)
    error: Forever detected script exited with code: 8
    error: Forever restarting script for 2 timeแก้ไข (2013-07-22)
เพิ่มตัวจัดการข้อผิดพลาดของไคลเอ็นต์ socket.io และตัวจัดการข้อยกเว้นที่ไม่ได้ตรวจสอบ ดูเหมือนว่าคนนี้จับข้อผิดพลาด:
    process.on('uncaughtException', function (err) {
      console.error(err.stack);
      console.log("Node NOT Exiting...");
    });ดังนั้นฉันสงสัยว่ามันไม่ใช่ปัญหา Socket.io แต่เป็นคำขอ HTTP ไปยังเซิร์ฟเวอร์อื่นที่ฉันทำหรือการเชื่อมต่อ MySQL / Redis ปัญหาคือกองข้อผิดพลาดไม่ได้ช่วยฉันระบุปัญหารหัสของฉัน นี่คือบันทึกผลลัพธ์:
    Error: read ECONNRESET
        at errnoException (net.js:900:11)
        at TCP.onread (net.js:555:19)ฉันจะรู้ได้อย่างไรว่าอะไรทำให้เกิดสิ่งนี้ ฉันจะได้รับเพิ่มเติมจากข้อผิดพลาดได้อย่างไร
ตกลงไม่ใช่ verbose มาก แต่นี่คือ stacktrace กับ Longjohn:
    Exception caught: Error ECONNRESET
    { [Error: read ECONNRESET]
      code: 'ECONNRESET',
      errno: 'ECONNRESET',
      syscall: 'read',
      __cached_trace__:
       [ { receiver: [Object],
           fun: [Function: errnoException],
           pos: 22930 },
         { receiver: [Object], fun: [Function: onread], pos: 14545 },
         {},
         { receiver: [Object],
           fun: [Function: fireErrorCallbacks],
           pos: 11672 },
         { receiver: [Object], fun: [Function], pos: 12329 },
         { receiver: [Object], fun: [Function: onread], pos: 14536 } ],
      __previous__:
       { [Error]
         id: 1061835,
         location: 'fireErrorCallbacks (net.js:439)',
         __location__: 'process.nextTick',
         __previous__: null,
         __trace_count__: 1,
         __cached_trace__: [ [Object], [Object], [Object] ] } }ที่นี่ฉันให้บริการไฟล์นโยบายซ็อกเก็ตแฟลช:
    net = require("net")
    net.createServer( (socket) =>
      socket.write("<?xml version=\"1.0\"?>\n")
      socket.write("<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n")
      socket.write("<cross-domain-policy>\n")
      socket.write("<allow-access-from domain=\"*\" to-ports=\"*\"/>\n")
      socket.write("</cross-domain-policy>\n")
      socket.end()
    ).listen(843)นี่เป็นสาเหตุได้หรือไม่