【问题标题】:PhantomJS doesn't start while websocket connection is open当 websocket 连接打开时 PhantomJS 不启动
【发布时间】:2016-06-05 18:23:25
【问题描述】:

我正在研究 slack bot,但遇到了奇怪的问题。我有一个使用 phantomJS 抓取网页的模块(通过 SpookyJS 和 CasperJS 在其之上)。我编写了这个模块并测试了它手动从命令行运行它。它运作良好。但后来我添加了抽象 Slack 实时 API 的 slackbots npm 模块,并创建了一个带有 bot 类的模块。这个机器人模块需要我的模块和抓取代码(phantomJS)并在消息事件触发时调用它的函数:

var getAnswer = require('./getAnswer');

myBot.prototype._onMessage = function (message) {
    if (this._isChatMessage(message) &&
        this._isChannelConversation(message) &&
        this._isMentioningMe(message)) {

        this._reply(message);
    }
};

this._reply 基本上只是调用getAnswer(originalMessage.text) 然后self.postMessageToChannel(channel.name, reply, {as_user: true});

getAnswer 返回一个承诺,但它永远不会得到实现。我让 CasperJS 成为 verbose 并看到之后没有任何反应

[info] [phantom] Starting...

一切都挂了...

我不知道如何解决这个问题。我猜是因为slackbots 模块在我调用Bot.prototype.run 时建立了websocket 连接。有什么建议吗?

【问题讨论】:

  • 可能与端口有关?也许nodejs只有一个端口可用,因此不能一次打开两个连接?

标签: javascript node.js websocket phantomjs casperjs


【解决方案1】:

正如我所说,我使用 Spooky 来生成子 CasperJS 进程。我去了 Spooky 文档页面并阅读了以下内容:

具体来说,每个 Spooky 实例都会生成一个子 Casper 进程,该进程 运行引导脚本。引导脚本设置 JSON-RPC 侦听来自父 Spooky 实例的命令的服务器 传输(HTTP 或 stdio)。该脚本还设置了 JSON-RPC 通过标准输出向父 Spooky 实例发送事件的客户端。

我使用http 作为传输,但它不起作用,所以我将其更改为 stdio 并且它有所帮助。如果有人能解释为什么它有帮助,我将不胜感激?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多