在 Node.JS 中是否有可能以这样的方式“断开”连接
- 客户端永远不会收到响应(200、404 或其他)
- 客户端永远不会收到连接终止的通知(永远不会收到连接重置或流结束)
- 服务器的资源被释放(服务器不应该试图以任何方式维持连接)
我特别询问 Solaris 上的 Node.JS HTTP 服务器(实际上只是复杂的 TCP 服务器),但如果在其他操作系统(Windows、Linux)或编程语言(C/C++、Java)上存在这种情况允许这个,我很感兴趣。
我为什么要这个?
惹恼或减慢(可能是单线程)机器人,例如 phpMyAdmin Probe .
我知道这并不是真正重要的事情,但这些类型的问题可以更好地帮助我了解我的程序的边界。
我知道客户端主机可能会重新传输连接的数据包,因为我从不发送重置。
最佳答案
这些在通用 TCP 堆栈中是不可能的(相对于您自己的自定义 TCP 堆栈)。原因是:
- 关闭一个socket发送一个RST
- 即使您避免发送 RST,客户端仍然认为连接已打开,而服务器已关闭连接。如果客户端在此连接上发送任何数据包,服务器将发送 RST。
您可能想探索为这些机器人设置防火墙并使用 iptables (linux) 或 solaris 上的等效项来阻止/限制它们的 IP 地址。
关于node.js - TCP 服务器 : Drop Connection, 而不是重置或响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127336/