在 Node.JS 中是否有可能以这样的方式“删除”连接

  • 客户端永远不会收到响应(200、404 或其他)
  • 客户端永远不会收到连接终止的通知(永远不会收到连接重置或流结束)
  • 服务器的资源被释放(服务器不应试图以任何方式保持连接)

  • 我特别询问 Solaris 上的 Node.JS HTTP 服务器(实际上只是复杂的 TCP 服务器),但如果其他操作系统(Windows、Linux)或编程语言(C/C++、Java)上存在允许这样做的情况,我有兴趣。

    我为什么要这个?

    惹恼或减慢(可能是单线程)机器人,例如 phpMyAdmin Probe

    我知道这并不是真正重要的事情,但是这些类型的问题可以更好地帮助我了解我的程序的边界。

    我知道客户端主机可能会重新传输连接的数据包,因为我从不发送重置。

    最佳答案

    这些在通用 TCP 堆栈中是不可能的(相对于您自己的自定义 TCP 堆栈)。原因是:

  • 关闭套接字发送 RST
  • 即使你避免发送 RST,客户端仍然认为连接是打开的,而服务器已经关闭了连接。如果客户端在此连接上发送任何数据包,服务器将发送 RST。

  • 您可能想探索对这些机器人进行防火墙保护,并使用 iptables (linux) 或 solaris 上的等价物来阻止/限制其 IP 地址。

    关于node.js - TCP 服务器 : Drop Connection, 而不是重置或响应?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8127336/

    10-11 19:30
    查看更多