【问题标题】:What's the easiest way to force-drop a WebSocket connection?强制删除 WebSocket 连接的最简单方法是什么?
【发布时间】:2012-07-17 00:32:23
【问题描述】:

面对不可靠的客户端连接,我正在尝试测试我的 WebSocket 服务器。

我希望能够在我选择的任何时候在客户端强制删除单个 WebSocket 连接,而无需发送关闭帧或 TCP FIN 握手。浏览器本身不能这样做(对吗?),因为它会在关闭选项卡时优雅地关闭每个 WebSocket。来自同一主机的其他 WebSocket 连接(我在其他浏览器窗口中)不应该受到影响。

我的系统是 Ubuntu Linux 12.04;我的浏览器是 Chrome(但我可以切换到任何与 WebSocket 兼容的浏览器来测试)。

服务器正在使用 Ruby 和 em-websocket。

我考虑过的选项:

  • killall -9 $pid_of_tab 但这有点粗鲁,内核显然仍然关闭 TCP 连接
  • iptables 防火墙规则,但这需要 root,并且很难只删除一个连接(来自本地主机)同时保持其他连接处于活动状态
  • 从另一台机器连接,然后拔下网线或禁用 wifi

最后两个可行,但感觉必须有更简单的方法。有什么想法吗?

【问题讨论】:

    标签: tcp websocket


    【解决方案1】:

    我怀疑您可以使用 FiddlerWebScarab 轻松完成此操作

    【讨论】:

    • 有趣的想法,我没有考虑过。我最终使用了 iptables hack,但如果我需要再次这样做,我会尝试 WebScarab。
    【解决方案2】:

    这是iptables 版本(假设套接字在本地主机,端口 3000 上提供):

    添加一个丢弃所有流量的规则:

    $ sudo iptables -A INPUT -i lo -p tcp --dport 3000 -j DROP
    

    再次删除该规则:

    $ sudo iptables -D INPUT -i lo -p tcp --dport 3000 -j DROP
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2011-11-12
      • 2013-01-08
      • 1970-01-01
      • 2012-04-19
      • 2017-12-25
      • 1970-01-01
      相关资源
      最近更新 更多