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

Javascript 打开包含socket.io与CasperJs/PhantomJs连接的页面,javascript,node.js,socket.io,phantomjs,casperjs,Javascript,Node.js,Socket.io,Phantomjs,Casperjs,我有一个页面可以打开到node.js服务器的websocket连接(socket.io) 出于测试目的,我想使用CasperJs(我还尝试了纯PhantomJs,结果相同),使用无头浏览器打开页面 总结: 使用Chrome打开socket.io连接始终有效。 使用CasperJs打开socket.io连接始终有效(至少在客户端和服务器上执行相应的回调)。 使用Chrome的消息交换(socket.emit)始终有效。 有时,使用CasperJs进行消息交换(socket.emit)是可行的 当我

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

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

总结:
使用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以进行调试):

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

此外,在客户端执行连接回调:

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

谢谢大家!

这很简单。是的,我只是想知道,为什么它有时会起作用。也许我会在某个时候再次尝试。
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();
Client disconnect (WebSocket): d-moyZ_D6Z6eG7SNAAAA connectionCount: 0