[英]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连接)保持不间断,因此从表面上看没有什么区别。 任何有关该主题的专业知识都将非常有帮助。
提前致谢!
我建议阅读这篇文章,然后根据您对代码的了解自行决定是否可以忽略ECONNRESET。 听起来您的Node应用程序可能正在尝试写入已关闭的连接(正在发送心跳信号?)。 从您的C#应用程序正确关闭连接可能会解决此问题,但是我不了解C#。
如果您有很多用户并且ECONNRESET导致连接进入TIME_WAIT,则可能会出现问题。 那将占用端口1-2分钟。 您可以在Linux上使用netstat进行查找,但是我确定有一个等效的Windows应用程序。
如果您真的想深入了解套接字通信的精髓,我建议使用Stevens撰写的出色的Unix Network Programming 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.