簡體   English   中英

我的Node.js服務器上是否存在ECONNRESET錯誤(如果有)?

[英]Implications (if any) of an ECONNRESET error on my Node.js server?

我有兩個協同工作的軟件組件-我制作的Visual Studio C#聊天應用程序,它通過TCP NetworkStream連接到承載非常簡單的TCP服務器的Node.js應用程序。

C#應用程序將通過TCP的NetworkStream消息發送到服務器,並一切正常,直到我關閉應用程序(實際過程是相對不重要,但是我在這里列出,並包括為清楚起見短GIF):

  • 首先,我啟動Node.js TCP服務器

  • 然后,C#應用程序啟動並為Node.js服務器打開一個TCP NetworkStream。

  • 我輸入消息“你好!” 進入C#應用的輸入並點擊“發送”

  • TCP服務器收到該消息

  • 但是,當我關閉C#應用程序時,出現ECONNRESET錯誤

在此處輸入圖片說明

我正在使用@@ RonBeyer指出的不建議使用NetworkStream.Close()在客戶端關閉NetworkStream。 根據MSDN,它:

關閉當前流並釋放與當前流關聯的任何資源(例如套接字和文件句柄)。 確保調用流正確處理,而不是調用此方法。

我認為這是通過C#中的using關鍵字完成的(鑒於我對語言的新手理解,我對此並不熟悉)。

但我消化 我所知道的是ECONNRESET錯誤是由套接字/流的突然關閉引起的。 奇特的是,不考慮服務器上的ECONNRESET錯誤,服務器就可以接受看似不受干擾的新連接。

所以我的問題是:

  • 在這種情況下忽略錯誤是否也很重要? 我在這里沒有看到任何可能的含義嗎?
  • 如果確實存在,那么到底是什么引起了問題(未使用的資源等)?

之所以這樣說,是因為服務器的功能(接受新的TCP連接)保持不間斷,因此從表面上看沒有什么區別。 任何有關該主題的專業知識都將非常有幫助。

粘貼到我的C#代碼

提前致謝!

我建議閱讀這篇文章,然后根據您對代碼的了解自行決定是否可以忽略ECONNRESET。 聽起來您的Node應用程序可能正在嘗試寫入已關閉的連接(正在發送心跳信號?)。 從您的C#應用​​程序正確關閉連接可能會解決此問題,但是我不了解C#。

如果您有很多用戶並且ECONNRESET導致連接進入TIME_WAIT,則可能會出現問題。 那將占用端口1-2分鍾。 您可以在Linux上使用netstat進行查找,但是我確定有一個等效的Windows應用程序。

如果您真的想深入了解套接字通信的精髓,我建議使用Stevens撰寫的出色的Unix Network Programming

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM