PhantomJS间歇性地拒绝连接

时间:2015-02-07 14:30:30

标签: rspec webdriver phantomjs watir-webdriver ghostdriver

我正在使用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

有一个spec文件在一开始就间歇性地失败(我会说,可能会失败而不是通过):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],< - [RST,ACK]。该过程仍然在内存中,但由于PhantomJS没有保留任何错误日志,我完全不知道是什么原因。

1 个答案:

答案 0 :(得分:0)

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

  

TIME_WAIT客户端在活动关闭后进入此状态

     

注意:套接字处于TIME_WAIT状态很长时间是正常的   一段的时间。 RFC793中指定的时间是Maximum的两倍   段寿命(MSL)。 MSL指定为2分钟。所以,一个插座   可能处于TIME_WAIT状态长达4分钟。一些系统   为MSL实现不同的值(少于2分钟)。

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

您的代码打开和关闭“浏览器”的次数是多少次?宾语?也许这与此有关?你可以用连接来运行吗?使用真正的浏览器,我们倾向于在测试运行开始时打开浏览器,并且只在最后关闭它,主要是为了节省浏览器本身的启动/关闭时间。如果您没有为测试做到这一点,您可能需要进行实验,看看它是否能解决您的问题。