2016-06-05 6 views
0

Ich arbeite an Slack Bot und ich habe seltsames Problem angetroffen. Ich habe ein Modul, das Web-Seite mit phantomJS (via SpookyJS & CasperJS auf der Oberseite) kratzt. Ich schrieb dieses Modul und testete es manuell von der Kommandozeile aus. Es läuft gut. Aber dann habe ich slackbots npm Modul hinzugefügt, das Slack Realtime API abstrahiert, und ein Modul mit bot-Klasse erstellt. Dieser Bot Modul benötigt mein Modul mit Code Schaben (PhantomJS) und ruft seine Funktion als Nachrichtenereignis auslöst:PhantomJS startet nicht, während Websocket-Verbindung geöffnet ist

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

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

     this._reply(message); 
    } 
}; 

this._reply im Grunde nur Anrufe getAnswer(originalMessage.text) und dann self.postMessageToChannel(channel.name, reply, {as_user: true});

getAnswer ein Versprechen gibt, aber es ist nie bekommen erfüllt . Ich machte CasperJS verbose sein und sah, dass nichts passiert, nachdem

[info] [phantom] Starting... 

Alles nur hängt ...

Ich habe keine Ahnung, wie dieses Problem zu beheben. Ich denke, es ist, weil slackbots Modul Websocket-Verbindung herstellt, wenn ich Bot.prototype.run anrufen. Irgendwelche Vorschläge?

+0

Vielleicht hat es etwas mit Ports zu tun? Vielleicht hat nodejs nur einen Port zur Verfügung und kann daher nicht zwei Verbindungen gleichzeitig öffnen? – dKab

Antwort

0

Wie gesagt, ich benutze Spooky, um Kind CasperJS Prozess zu spawnen. Ich ging zu Spooky Dokumentation Seite und lesen Sie:

Insbesondere ist jedes Spooky Beispiel laicht ein Kind Casper Prozess, die einen Bootstrap-Skript ausgeführt wird. Das Bootstrap-Skript richtet einen JSON-RPC -Server ein, der Befehle von der übergeordneten Spooky-Instanz über einem Transport (HTTP oder Stdio) überwacht. Das Skript richtet auch einen JSON-RPC -Client ein, der über stdout Ereignisse an die übergeordnete Spooky-Instanz sendet.

Ich benutzte http als ein Transport und es hat nicht funktioniert, also habe ich es auf stdio geändert und es half. Ich würde es begrüßen, wenn jemand erklären könnte, warum es half?