打开包含与CasperJs / PhantomJs的socket.io连接的页面

时间:2014-09-13 15:23:47

标签: javascript node.js socket.io phantomjs casperjs

我有一个打开websocket连接(socket.io)到node.js服务器的页面。

出于测试目的,我想使用无头浏览器打开页面,使用CasperJs(我也尝试过使用相同结果的纯PhantomJ)。

要点:
使用Chrome打开socket.io连接始终有效。 使用CasperJs打开socket.io连接始终有效(至少在客户端和服务器上执行相应的回调) 使用Chrome的消息交换(socket.emit)始终有效 使用CasperJs的消息交换(socket.emit)有时有效。

当我将socket.io配置为仅使用轮询而不是websocket时,我得到相同的行为。我知道"有时"并不是很准确,但我还没有找到一个"模式"但是当它发生时。

您是否使用无头浏览器成功打开socket.io/websockets页面?你有什么提示可能是什么原因吗?

更多细节:

我的客户执行

var socket = io.connect('http://localhost:3000');

之后在服务器上调用连接方法(它打印传输类型和套接字ID以进行调试):

io.on('connection', function (socket) {
     console.log('Client connect ('+ socket.client.conn.transport.constructor.name +'): ' + socket.id);
     ...
}

输出是预期的(socket.io首先使用XHR,然后升级到websocket):

Client connect (XHR): d-moyZ_D6Z6eG7SNAAAA

同样在客户端执行connect回调:

socket.on('connect', function () {
   console.log("Client successfully connected to data server. Transport type: " + socket.io.engine.transport.constructor.name);
   ...
}

客户端控制台上的输出符合预期:

Client successfully connected to data server. Transport type: XHR

如果我使用普通浏览器,我可以毫无问题地交换消息。如果我使用我的casper脚本,则消息交换有时有效。在大多数情况下,当我调用socket.emit时没有任何反应。 casper脚本非常基本。我觉得它可能是一个计时问题,所以我创建了一个等待执行连接的javascript资源,没有变化:

casper = require('casper').create({
    verbose: true,
    logLevel: "debug"
});

casper.start('page.html', function() {
    this.echo(this.getTitle());
});

casper.waitForResource("dataConnection.js", function() {
    this.echo('socket.io has been loaded.');
    this.wait(14000, function() {
        this.echo("I've waited for some seconds.");
    });
    this.capture('casper.png');
});

casper.on('remote.message', function(message) {
   console.log(message);
});
casper.run();

客户端/服务器上的断开连接回调也按预期执行。您可以看到对websocket的升级工作:

Client disconnect (WebSocket): d-moyZ_D6Z6eG7SNAAAA connectionCount: 0

谢谢!

0 个答案:

没有答案