ฉันจะดีบักข้อผิดพลาด ECONNRESET ใน Node.js ได้อย่างไร


288

ฉันใช้แอพพลิเคชั่น 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)

นี่เป็นสาเหตุได้หรือไม่


3
@GottZ บางทีความช่วยเหลือนี้สามารถ (พูดกับคนที่ทำงานภายใน js โหนด) gist.github.com/samsonradu/1b0c6feb438f5a53e30e ฉันจะปรับใช้ตัวจัดการ socket.error วันนี้และแจ้งให้คุณทราบ
แซมซั่น

1
@Gottz ตัวจัดการ socket.error ไม่ช่วย แต่ process.on ('uncaughtException') จับข้อผิดพลาด นี่คือ console.log ของข้อผิดพลาด: {[ข้อผิดพลาด: อ่าน ECONNRESET] รหัส: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read'}
Samson

1
ECONNRESET อาจมาจากปัญหาเครือข่าย ดังที่คุณทราบว่าเป็นไปไม่ได้ที่จะตรวจจับข้อยกเว้นทั้งหมดเมื่อทำการทดสอบ บางอย่างจะปรากฏขึ้นบนเซิร์ฟเวอร์ที่ใช้งานจริงของคุณ คุณจะต้องทำให้เซิร์ฟเวอร์ของคุณแข็งแกร่ง คุณสามารถจัดการกับการลบเซสชันโดยใช้ Redis เป็นที่เก็บข้อมูล มันทำให้เซสชันของคุณยังคงอยู่แม้หลังจากที่โหนดเซิร์ฟเวอร์ของคุณหยุดทำงาน
user568109

1
เหตุใดจึงเกี่ยวข้องกับการลบเซสชัน พวกเขาได้รับการจัดการโดย Redis ต่อไป
แซมซั่น

3
คุณมีฟังซ็อกเก็ต TCP อย่างน้อยหนึ่งรายการที่ไม่มีชุดตัวจัดการ ดังนั้นถึงเวลาที่จะตรวจสอบว่าที่อยู่คือ: D
Moss

คำตอบ:


253

คุณอาจเดาได้แล้วว่ามันเป็นข้อผิดพลาดในการเชื่อมต่อ

"ECONNRESET"หมายถึงด้านอื่น ๆ ของการสนทนา TCP ในทันทีปิดการเชื่อมต่อที่สิ้นสุด นี่อาจเป็นเพราะข้อผิดพลาดของโปรโตคอลแอปพลิเคชันอย่างน้อยหนึ่งรายการ คุณสามารถดูบันทึกของเซิร์ฟเวอร์ API เพื่อดูว่ามีบางสิ่งที่บ่นหรือไม่

แต่เนื่องจากคุณกำลังมองหาวิธีการตรวจสอบข้อผิดพลาดและอาจแก้ปัญหาได้คุณควรดูที่" วิธีการดีบักซ็อกเก็ตวางสายข้อผิดพลาดใน NodeJS? "ซึ่งถูกโพสต์ที่ stackoverflow เกี่ยวกับคำถามที่เหมือนกัน

โซลูชันที่รวดเร็วและสกปรกสำหรับการพัฒนา :

ใช้ longjohnคุณจะได้รับร่องรอยสแต็คแบบยาวที่จะมีการดำเนินการแบบ async

วิธีการแก้ปัญหาที่สะอาดและถูกต้อง : ในทางเทคนิคในโหนดเมื่อใดก็ตามที่คุณส่ง'error'เหตุการณ์และไม่มีใครฟังเหตุการณ์นั้นจะเกิดขึ้น เพื่อไม่ให้โยนใส่ผู้ฟังและจัดการด้วยตัวเอง ด้วยวิธีนี้คุณสามารถบันทึกข้อผิดพลาดด้วยข้อมูลเพิ่มเติม

ในการมีผู้ฟังหนึ่งรายสำหรับกลุ่มการโทรคุณสามารถใช้โดเมน และตรวจจับข้อผิดพลาดอื่น ๆ ในขณะทำงาน ตรวจสอบให้แน่ใจว่าการดำเนินการ async แต่ละรายการที่เกี่ยวข้องกับ http (เซิร์ฟเวอร์ / ไคลเอ็นต์) อยู่ในบริบทโดเมนที่แตกต่างกันเมื่อเปรียบเทียบกับส่วนอื่น ๆ ของรหัสโดเมนจะรับฟังerrorเหตุการณ์โดยอัตโนมัติและจะเผยแพร่ไปยังผู้จัดการของตนเอง ดังนั้นคุณจะรับฟังตัวจัดการนั้นและรับข้อมูลข้อผิดพลาด คุณยังได้รับข้อมูลเพิ่มเติมฟรี

แก้ไข (2013-07-22)

ตามที่ฉันเขียนไว้ด้านบน:

"ECONNRESET"หมายถึงด้านอื่น ๆ ของการสนทนา TCP ในทันทีปิดการเชื่อมต่อที่สิ้นสุด นี่อาจเป็นเพราะข้อผิดพลาดของโปรโตคอลแอปพลิเคชันอย่างน้อยหนึ่งรายการ คุณสามารถดูบันทึกของเซิร์ฟเวอร์ API เพื่อดูว่ามีบางสิ่งที่บ่นหรือไม่

สิ่งที่อาจเป็นได้เช่นกัน: ในเวลาสุ่มอีกด้านหนึ่งมีการโอเวอร์โหลดและฆ่าการเชื่อมต่อเป็นผล หากเป็นกรณีนี้ขึ้นอยู่กับสิ่งที่คุณกำลังเชื่อมต่อกับ ...

แต่สิ่งหนึ่งที่แน่นอนคือคุณมีข้อผิดพลาดในการอ่านในการเชื่อมต่อ TCP ของคุณซึ่งทำให้เกิดข้อยกเว้น คุณสามารถดูได้โดยดูรหัสข้อผิดพลาดที่คุณโพสต์ในการแก้ไขซึ่งยืนยันได้


ไม่จำเป็นต้องหมายถึง 'ปิดทันที' มันมักจะเป็นผลมาจากการเขียนการเชื่อมต่อที่เพียร์ได้ปิดแล้วตามปกติ ที่จะทำให้มันออก RST
มาร์ควิสแห่ง Lorne

1
@EJP มีเหตุผลที่ดีที่ฉันเขียน“ ทันที” ข้อผิดพลาด (ไม่ใช่คำเตือน) ระบุว่าการเชื่อมต่อถูกรีเซ็ตโดยเพียร์ การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิดโดยเพียร์ระยะไกล การปิดการบังคับอย่างกะทันหันตั้งแต่คาดไม่ถึง! (โดยปกติแล้วจะส่งผลให้หากแอปพลิเคชั่นเพียร์บนเครื่องรีโมตหยุดทำงานกะทันหันเครื่องรีบูทหรือแอพพลิเคชั่นเพียร์ใช้ "ปิดฮาร์ด" บนซ็อกเก็ตระยะไกลข้อผิดพลาดนี้อาจส่งผลหากการเชื่อมต่อใช้งานไม่ได้ การตรวจสอบความล้มเหลวขณะหนึ่งหรือมากกว่าการดำเนินงานมีความคืบหน้า ... ดำเนินการเหล่านี้และการดำเนินงานที่ตามมาจะล้มเหลว).
E-ซูชิ

2
ฉันได้รับข้อผิดพลาดนี้เมื่อแบทช์ส่งการโทร API ประมาณ 100 ครั้งใกล้เคียงกับเบราว์เซอร์ (Chrome) เพื่อทำการทดสอบ ฉันคิดว่า Chrome ต้องทำงานหนักเกินไปและฆ่าการเชื่อมต่อบางอย่าง ... @Samson - เกิดอะไรขึ้นกับการประมวลผลคำขอแต่ละรายการในโดเมนของตัวเองและตรวจจับข้อผิดพลาดโดเมนโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์
supershnee

2
@supershnee คุณควรรีสตาร์ทเซิร์ฟเวอร์เกือบทุกครั้งหลังจากมีข้อยกเว้นที่ไม่ได้ตรวจสอบเนื่องจากข้อมูลแอปพลิเคชันและโหนดของคุณเองอยู่ในสถานะที่ไม่รู้จัก การดำเนินการต่อหลังจากข้อยกเว้นทำให้ข้อมูลของคุณมีความเสี่ยง หากคุณต้องการที่จะหาเพิ่มเติมให้ตรวจสอบเอกสารโหนดในกระบวนการหรือเอกสารของโหนดบนโดเมน
c1moore

39

เซิร์ฟเวอร์ tcp ง่าย ๆ ที่ฉันมีให้บริการไฟล์นโยบายแฟลชทำให้เกิดปัญหานี้ ตอนนี้ฉันสามารถจับข้อผิดพลาดโดยใช้ตัวจัดการ:

# serving the flash policy file
net = require("net")

net.createServer((socket) =>
  //just added
  socket.on("error", (err) =>
    console.log("Caught flash policy server socket error: ")
    console.log(err.stack)
  )

  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)

2
มีอะไรผิดปกติกับรหัสหรือไม่ ฉันควรตรวจสอบว่าซ็อกเก็ตนั้นสามารถเขียนได้ก่อนเขียนหรือไม่?
แซมสัน

Doh ไม่เห็นว่าคุณได้พบวิธีการแก้ปัญหาก่อนที่ฉันโพสต์ค่อนข้างเหมือนกัน :) สำหรับคำถามของคุณแม้ว่าคุณจะตรวจสอบว่าซ็อกเก็ตที่เขียนได้อาจไม่เมื่อคุณเขียนถึง microseconds ในภายหลังและ จะยังคงโยนข้อผิดพลาดดังนั้นนี่คือ "วิธี" เพื่อให้แน่ใจ
Joachim Isaksson

ตกลงและมีวิธีที่ปลอดภัยถ้าเป็นเช่นนี้? เช่น socket.close () ภายในตัวจัดการข้อผิดพลาดหรือไม่ เพราะฉันคิดว่าการโหลด CPU ของฉันเพิ่มขึ้นหลังจากข้อผิดพลาดเหล่านี้ (ไม่แน่ใจ)
Samson

2
ฉันมักจะเรียกsocket.destroy()ตัวจัดการข้อผิดพลาดเพื่อให้แน่ใจ น่าเศร้าที่ฉันไม่สามารถหาเอกสารได้ว่าจำเป็นหรือไม่ แต่ไม่ได้ปล่อยข้อผิดพลาดให้ทำ
Joachim Isaksson

socket.destroy () บันทึกวันของฉันไม่ว่ามันจะทำงานอย่างไร !! ขอบคุณ!
Firas Abd Alrahman

27

ฉันมีปัญหาที่คล้ายกันซึ่งแอพเริ่มผิดพลาดหลังจากอัพเกรดโหนด ฉันเชื่อว่าสิ่งนี้สามารถสืบย้อนกลับไปที่โหนดปล่อย v0.9.10 รายการนี้:

  • สุทธิ: อย่าระงับ ECONNRESET (Ben Noordhuis)

เวอร์ชันก่อนหน้าจะไม่เกิดข้อผิดพลาดจากการขัดจังหวะจากลูกค้า ตัวแบ่งในการเชื่อมต่อจากไคลเอนต์ส่งข้อผิดพลาด ECONNRESET ในโหนด ฉันเชื่อว่านี่เป็นจุดประสงค์การทำงานของ Node ดังนั้นการแก้ไข (อย่างน้อยสำหรับฉัน) ก็เพื่อจัดการข้อผิดพลาดซึ่งฉันเชื่อว่าคุณทำในข้อยกเว้นที่ไม่ถูกจับ แม้ว่าฉันจะจัดการกับมันใน net.socket handler

คุณสามารถแสดงสิ่งนี้:

ทำซ็อกเก็ตเซิร์ฟเวอร์อย่างง่ายและรับโหนด v0.9.9 และ v0.9.10

require('net')
    .createServer( function(socket) 
    {
           // no nothing
    })
    .listen(21, function()
     {
           console.log('Socket ON')
    })

เริ่มต้นขึ้นโดยใช้ v0.9.9 จากนั้นลอง FTP ไปยังเซิร์ฟเวอร์นี้ ฉันใช้ FTP และพอร์ต 21 เท่านั้นเพราะฉันใช้ Windows และมีไคลเอ็นต์ FTP แต่ไม่มีไคลเอ็นต์ telnet ที่มีประโยชน์

จากนั้นในฝั่งไคลเอ็นต์เพียงตัดการเชื่อมต่อ (ฉันแค่ทำ Ctrl-C)

คุณควรเห็น NO ERROR เมื่อใช้ Node v0.9.9 และ ERROR เมื่อใช้ Node v.0.9.10 ขึ้นไป

ในการผลิตฉันใช้ v.0.10 บางสิ่งบางอย่างและมันยังคงให้ข้อผิดพลาด อีกครั้งฉันคิดว่านี่เป็นจุดมุ่งหมายและวิธีแก้ไขคือจัดการข้อผิดพลาดในรหัสของคุณ


3
ขอบคุณฉันจับมันด้วยตัวเอง! เป็นสิ่งสำคัญที่จะไม่ปล่อยให้ข้อผิดพลาดแพร่กระจายไปยัง uncaughtException เนื่องจากจะทำให้แอปทั้งหมดไม่เสถียร เช่นหลังจากจับข้อผิดพลาด ECONNRESET ประมาณ 10 ครั้งบางครั้งเซิร์ฟเวอร์ก็ไม่ตอบสนอง (เพียงแค่แช่แข็งและไม่ได้จัดการการเชื่อมต่อใด ๆ )
Samson

ยังรู้เกี่ยวกับการเปลี่ยนแปลงเวอร์ชันของโหนดที่ไม่ได้ระงับข้อผิดพลาดอีกต่อไป แต่เมื่อพบปัญหามากมายที่ปรากฏขึ้นและได้รับการแก้ไขในแต่ละเวอร์ชันที่ฉันต้องการแทนที่จะเป็นเวอร์ชันล่าสุด ฉันใช้ V0.10.13 ตอนนี้ btw
แซมสัน

16

มีปัญหาเดียวกันวันนี้ หลังจากการวิจัยบางอย่างที่ฉันพบว่ามีประโยชน์มากตัวเลือก--abort-on-uncaught-exception Node.js ไม่เพียง แต่จะให้การติดตามสแต็กข้อผิดพลาด verbose และมีประโยชน์มากขึ้น แต่ยังบันทึกไฟล์หลักในแอพพลิเคชั่นที่ผิดพลาดทำให้สามารถทำการดีบักเพิ่มเติมได้


4
แปลกที่คำตอบใหม่สำหรับคำถามเก่านี้ควรปรากฏขึ้นในขณะที่ฉันกำลังมองหา - แต่นี่เป็นสิ่งที่ดีขอบคุณ
Semicolon

13

ฉันกำลังเผชิญปัญหาเดียวกัน แต่ฉันลดลงโดยวาง:

server.timeout = 0;

server.listenก่อนที่ serverเป็นเซิร์ฟเวอร์ HTTP ที่นี่ หมดเวลาการเริ่มต้นคือ 2 นาทีตามเอกสาร API


5
นี่ไม่ใช่วิธีการแก้ปัญหา แต่เป็นคำสั่งด่วนซึ่งจะแยกสิ่งต่าง ๆ โดยไม่เกิดข้อผิดพลาด
Nishant Ghodke

9

อีกกรณีที่เป็นไปได้ (แต่หายาก) อาจเป็นได้ถ้าคุณมีการสื่อสารกับเซิร์ฟเวอร์และตั้งค่าไว้ server.maxConnectionsต่ำมาก

ใน core lib net.jsของโหนดมันจะเรียกclientHandle.close()ซึ่งจะทำให้เกิดข้อผิดพลาด ECONNRESET:

if (self.maxConnections && self._connections >= self.maxConnections) {
  clientHandle.close(); // causes ECONNRESET on the other end
  return;
}

เยี่ยมมาก แต่ maxConnectionsInfinityค่าเริ่มต้นคือ นี่เป็นเพียงกรณี (ตามที่คุณพูด) หากคุณได้แทนที่ค่านั้นอย่างชัดเจน
Gajus

7

ใช่การแสดงไฟล์นโยบายของคุณอาจทำให้เกิดความผิดพลาดได้

หากต้องการทำซ้ำเพียงเพิ่มความล่าช้าในรหัสของคุณ:

net.createServer( function(socket) 
{
    for (i=0; i<1000000000; i++) ;
    socket.write("<?xml version=\"1.0\"?>\n");

... และใช้ telnetเพื่อเชื่อมต่อกับพอร์ต หากคุณตัดการเชื่อมต่อ telnet ก่อนที่ความล่าช้าจะหมดอายุคุณจะได้รับข้อผิดพลาด (ข้อยกเว้นที่ไม่ได้ตรวจสอบ) เมื่อ socket.write โยนข้อผิดพลาด

เพื่อหลีกเลี่ยงความผิดพลาดที่นี่เพียงเพิ่มตัวจัดการข้อผิดพลาดก่อนที่จะอ่าน / เขียนซ็อกเก็ต:

net.createServer(function(socket)
{
    for(i=0; i<1000000000; i++);
    socket.on('error', function() { console.log("error"); });
    socket.write("<?xml version=\"1.0\"?>\n");
}

เมื่อคุณลองตัดการเชื่อมต่อด้านบนคุณจะได้รับข้อความบันทึกแทนที่จะเกิดข้อผิดพลาด

และเมื่อคุณทำเสร็จแล้วอย่าลืมลบความล่าช้า


6

ฉันยังได้รับข้อผิดพลาด ECONNRESET ในระหว่างการพัฒนาวิธีที่ฉันแก้ปัญหาก็คือ ไม่ใช้ nodemon เพื่อเริ่มต้นเซิร์ฟเวอร์เพียงใช้"node server.js"เพื่อเริ่มต้นเซิร์ฟเวอร์ของฉันแก้ไขปัญหาของฉัน

มันแปลก แต่ใช้งานได้สำหรับฉันตอนนี้ฉันไม่เคยเห็นข้อผิดพลาด ECONNRESET อีกเลย


4

ฉันมีข้อผิดพลาดนี้เช่นกันและสามารถแก้ไขได้หลังจากการดีบักและวิเคราะห์เป็นเวลาหลายวัน:

ทางออกของฉัน

สำหรับฉัน VirtualBox (สำหรับนักเทียบท่า) คือปัญหา ฉันมีการกำหนดค่าการส่งต่อพอร์ตบน VM ของฉันและข้อผิดพลาดเกิดขึ้นเฉพาะบนพอร์ตที่ส่งต่อ

ข้อสรุปทั่วไป

ข้อสังเกตต่อไปนี้อาจช่วยให้คุณประหยัดเวลาในการทำงานที่ฉันต้องลงทุน:

  • สำหรับฉันปัญหาเกิดขึ้นเฉพาะกับการเชื่อมต่อจาก localhost ไปยัง localhost บนพอร์ตเดียว -> ตรวจสอบการเปลี่ยนค่าคงที่ใด ๆ เหล่านี้แก้ปัญหาได้
  • สำหรับฉันปัญหาเกิดขึ้นเฉพาะในเครื่องของฉัน -> ให้คนอื่นลอง
  • สำหรับฉันปัญหาเกิดขึ้นหลังจากผ่านไปครู่หนึ่งและไม่สามารถทำซ้ำได้อย่างน่าเชื่อถือ
  • ปัญหาของฉันไม่สามารถตรวจสอบได้กับโหนดใด ๆ หรือเครื่องมือ (debug-) ด่วน -> ไม่ต้องเสียเวลากับสิ่งนี้

-> หาว่ามีบางอย่างยุ่งกับเครือข่ายของคุณ (- ตั้งค่า) เช่น VM, ไฟร์วอลล์ ฯลฯ อาจเป็นสาเหตุของปัญหา


2

ฉันแก้ไขปัญหาด้วยการเชื่อมต่อกับเครือข่ายอื่น นั่นคือหนึ่งในปัญหาที่เป็นไปได้

ตามที่กล่าวไว้ข้างต้นECONNRESETหมายความว่าการสนทนา TCP ปิดทันทีในตอนท้ายของการเชื่อมต่อ

การเชื่อมต่ออินเทอร์เน็ตของคุณอาจบล็อกคุณไม่ให้เชื่อมต่อกับเซิร์ฟเวอร์บางตัว ในกรณีของฉันฉันพยายามเชื่อมต่อกับ mLab (บริการฐานข้อมูลคลาวด์ที่โฮสต์ฐานข้อมูล MongoDB) และ ISP ของฉันกำลังบล็อกอยู่


หนึ่งนี้ทำงานสำหรับฉันรหัสของฉันซึ่งทำงานได้ดีไม่กี่ชั่วโมงกลับก็หยุดทำงานกลับกลายเป็นว่าการเปลี่ยนแปลงเครือข่ายทำให้เกิดปัญหา
Aklank Jain

2

ฉันได้แก้ไขปัญหานี้โดย:

  • ปิดการเชื่อมต่อ wifi / ethernet ของฉันและเปิด
  • ฉันพิมพ์: npm updateในเทอร์มินัลเพื่ออัปเดต npm
  • ฉันพยายามออกจากระบบและเข้าสู่ระบบอีกครั้ง

หลังจากนั้นฉันลองใช้คำสั่ง npm เดียวกันและสิ่งที่ดีคือมันได้ผล ฉันไม่แน่ใจว่ามันง่ายขนาดนั้น

ฉันใช้ CENTOS 7


0

ฉันมีปัญหาเดียวกันและปรากฏว่ารุ่น Node.js เป็นปัญหา

ฉันติดตั้ง Node.js รุ่นก่อนหน้า (10.14.2) และทุกอย่างก็โอเคโดยใช้ nvm (อนุญาตให้คุณติดตั้ง Node.js หลายรุ่นและเปลี่ยนจากรุ่นหนึ่งเป็นรุ่นอื่นได้อย่างรวดเร็ว)

มันไม่ใช่ทางออกที่ "สะอาด" แต่สามารถให้บริการคุณได้ชั่วคราว


0

ฉันเพิ่งคิดออกอย่างน้อยก็ในกรณีที่ใช้ของฉัน

ECONNRESETผมได้รับ มันกลับกลายเป็นว่าวิธีการตั้งค่าไคลเอนต์ของฉันมันตีเซิร์ฟเวอร์ด้วยการเรียก API เป็นจำนวนมากอย่างรวดเร็ว - และมันก็แค่ต้องการที่จะตีจุดปลายเพียงครั้งเดียว

เมื่อฉันแก้ไขข้อผิดพลาดก็หายไป


-2

ลองเพิ่มตัวเลือกเหล่านี้เพื่อ socket.io:

const options = { transports: ['websocket'], pingTimeout: 3000, pingInterval: 5000 };

ฉันหวังว่านี่จะช่วยคุณได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.