【问题标题】:PhantomJS refuses connections intermittentlyPhantomJS 间歇性地拒绝连接
【发布时间】:2015-02-07 14:30:29
【问题描述】:

我正在使用 Ruby 2.1.0、watir-webdriver、rspec、taza 和 PhantomJS 1.9.8。操作系统是Linux tester 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u1 i686 GNU/Linux

我通过Watir::Browser.new 运行 PhantomJS 并提供以下命令行参数:--ignore-ssl-errors=true --ssl-protocol=any --debug=true --cookies-file=/tmp/cookies.txt

一开始有一个规范文件间歇性地失败(我想说,可能是失败而不是通过):Connection refused - connect(2) for "127.0.0.1" port 8910。与此同时,netstat -tulpan 显示:

...
tcp        0      0 127.0.0.1:43695         127.0.0.1:8910          TIME_WAIT   -
tcp        0      0 127.0.0.1:43723         127.0.0.1:8910          TIME_WAIT   -
tcp        0      0 127.0.0.1:43743         127.0.0.1:8910          TIME_WAIT   -
tcp        0      0 127.0.0.1:43677         127.0.0.1:8910          TIME_WAIT   -
tcp        0      0 127.0.0.1:43740         127.0.0.1:8910          TIME_WAIT   -
...

总共大约 90 个端口。在rspec 退出后,它们仍保持打开状态。我对这种故障的间歇性感到困惑。有没有其他人遇到过同样的问题?非常感谢任何建议、推荐、链接等。谢谢。


UPD:我仔细看了看,发现在某个时间点 PhantomJS 开始丢弃来自 webdriver 的连接:-> [SYN],

【问题讨论】:

  • 是的,这看起来确实像是 PhantomJS 的某种问题。奇怪的是,您只有一个似乎有问题的规范文件,有点让您怀疑网页上或客户端 JS 代码中是否发生了不同的事情导致 Phantom JS 出现问题。

标签: rspec webdriver phantomjs watir-webdriver ghostdriver


【解决方案1】:

我不知道这是否能解决您的问题,但它可以解释您使用 netstat 看到的情况。请注意,显示的状态是TIME_WAIT。查看 netstat 上的文档表明,这是在端口关闭后一段时间内显示的常见状态

TIME_WAIT 客户端主动关闭后进入该状态

注意:socket长时间处于TIME_WAIT状态是正常的 一段的时间。时间在 RFC793 中指定为最大值的两倍 段生命周期 (MSL)。 MSL 指定为 2 分钟。所以,一个插座 可能处于 TIME_WAIT 状态长达 4 分钟。一些系统 为 MSL 实现不同的值(少于 2 分钟)。

请注意,来自this MS support page,因此您的 MSL 长度可能与您在 Debian Linux 上的 2 分钟不同,但其余部分基于协议规范,因此适用于任何实现该规范的操作系统正确规范

您的代码打开和关闭“浏览器”对象多少次?也许这与此有关?你能把它用完吗?对于真正的浏览器,我们倾向于在测试运行开始时打开浏览器,并且只在最后关闭它,主要是为了节省浏览器本身的启动/关闭时间。如果您不是为了测试而这样做,您可能需要进行试验,看看它是否能解决您的问题。

【讨论】:

  • 感谢您的回答。就是这样——我只启动一次浏览器,打开的大量端口可能是核心问题(如果存在一些限制)。这个测试与我的预期和其他测试没有什么不同,但是他们通过了,而这个没有。
  • webdriver 和 phantomjs 之间的连接是由 webdriver 处理的。 (watir 只是调用 webdriver api 并传递适当的参数)所以我将为您编辑和添加一些 webdriver 标签,也许该级别的专家可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2021-05-27
  • 1970-01-01
  • 2016-03-12
  • 2015-07-27
  • 2011-01-11
相关资源
最近更新 更多