Wie sollte ich laufen, NodeJS von einer Java-Anwendung?
Ich Schreibe eine Java-Bibliothek, die eigentlich eine Clojure-Bibliothek, aber für diese Frage, worauf es ankommt, ist, dass es läuft auf der JVM. Diese Bibliothek benötigt zur Ausführung JavaScript. Ich habe versucht, mit Nashorn aber ich stoßen einige Einschränkungen, die möglicherweise zu schwer zu überwinden. Als alternative, ich will versuchen, NodeJS.
Möchte ich meine Bibliothek zu eigenständig, um nicht abhängig vom system ausgeführt NodeJS-unabhängig und benötigen deshalb eine Besondere deployment-Mechanismus die Java und NodeJS-Artefakte an den richtigen stellen hochgehoben werden, die durch die zwei verschiedene Netzwerk-Server. Dieser Ansatz, obwohl, bringt einige Probleme.
Werde ich sprechen NodeJS über HTTP, aber ich will nicht NodeJS so öffnen Sie einen bestimmten port. Ich möchte eine zufällige unbenutzt ein, so gibt es keine Kollisionen. Ich will auch kontrollieren, wo die Protokolle von NodeJS gehen, wie Sie zu halten mit dem rest meiner Bewerbung. Schließlich, meine app sollte in der Lage sein zu erkennen, wenn NodeJS abgestürzt und starten Sie es erneut oder melden einen Fehler mit Informationen.
Was ist der beste Weg, dies zu nähern? Gibt es irgendwelche Java-Bibliotheken zum verwalten der Kind-Prozess in dieser Art und Weise? Etwas bestimmtes, das ich tun soll, von der NodeJS-Seite (ich bin sehr neu in NodeJS, ich habe es nie benutzt, bevor).
Haben Sie schon von avatar? Ich hatte auch einige Probleme, wo ich nicht einige nodejs-Module, aber avatar füllte die Lücke : strongloop.com/strongblog/...
Nur um einzugrenzen, die Antwort ein bisschen...was sind die Einschränkungen, denen Sie begegnen, genau? Server-side-scripting mit nashorn ist das hinzufügen von 6ms auf die avg. Reaktionszeit in Ihrem Beitrag am Ende, also ich denke die Leistung ist nicht einer von Ihnen
InformationsquelleAutor pupeno | 2015-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Lösung am Ende war der Einsatz von ProcessBuilder wie diese:
Ruf und dann starten Sie es. inheritIO bewirkt, dass die Ausgabe von dem Ausgang des aktuellen Prozesses, die effektiv verbindet stdout und stderr.
Oben auf, dass NodeJS öffnet einen zufälligen port, der durch Angabe von 0 als Portnummer ein und schreibt es in eine Datei:
die dann geöffnet wird, die von der Java-Seite (wartet bis es angezeigt wird):
Dachte, ich würde bemerken, dass Node.js hören auf 0 möglicherweise nicht immer wie erwartet. Siehe hier
Ich konnte nicht herausfinden, wie vollständig ist nodyn.io, es scheint nicht sehr vollständig, und das Projekt wird offiziell aufgegeben.
InformationsquelleAutor pupeno
Gibt es eine ziemlich gute Antwort hier über das ausführen von javascript in java. Würde so etwas machbar sein, für Ihren Fall? Wenn nicht, hier sind einige Ressourcen:
Es klingt wie werden Sie mit einer Menge der cpu innerhalb von Knoten. Wenn das der Fall ist, werden Sie wahrscheinlich wollen, verwenden Sie die cluster-Modul (so nodejs nutzen können mehrere Kerne). Wenn Sie blockieren die Ereignis-Schleife (die cpu-basierten Verarbeitung werden, dann werden Sie nur in der Lage sein, 1 gleichzeitige Anfragen pro Gabel-Prozess).
InformationsquelleAutor Cody Gustafson
Nashorn hat einige Probleme, die ich habe, laufen in so gut, wie die Suche nach Informationen über einige Ihrer APIs (Dokumentation lässt sehr zu wünschen übrig), und das langsame Hochfahren.
Was ich empfehlen würde, stattdessen: verwöhnen Sie Ihre server-side-rendering als service und nicht ein Kind-Prozess.
In anderen Worten, Sie laufen konnte Node.js Instanz auf Ihrem internen Netz auf z.B. port
10015
und erlauben nur lokale verbindungen, um es (Sie könnten auch Protokolle senden, wo immer Sie wollen). Dann können Sie eine Anfrage an den service und die Seiten, die Sie Rendern möchten, wielocalhost:10015/posts/
haben und dass Node.js app Rendern der Seite in einem headless browser (mit so etwas wie Phantom-oder Slimer).Halten Sie Ihre Knoten-server, die Sie verwenden können
Forever
odersupervisord
, und zu helfen, Sie zu gewinnen Traktion schneller, könnte man schauen, was das Prerender-team gemacht hat:https://github.com/prerender/prerender-node
InformationsquelleAutor Cameron
War ich in einer ähnlichen position, wo ich laufen musste fortran aus einem python-Skript, so, hier ist meine zwei Cent. Führen Sie Ihre node.js Skript mit einem terminal-Befehl in Java so:
Mit setup können Sie pass in Parameter auf Ihre Knoten-Programm und erhalten Sie Antworten. Obwohl ich bin mir nicht sicher, was Sie mit Ihrem node.js Programm für, also nicht sicher, wenn dies hilfreich ist.
Auch Verstand ich die OP nicht wollen, zu hängen, Knoten, die auf dem system installiert
InformationsquelleAutor jjbskir