繁体   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