Wie sollte ich mehrere Express-Server auf demselben System organisieren?
Ich bin mit einem server, um host mehrere Node.js web-apps, die verteilt über mehrere Domänen. Meine derzeitige Praxis ist, zum ausführen einer Express-server für jede app einen anderen port, und zum ausführen eines Basisstation-server, der einfach Routen (Weiterleitungen) Anforderungen an den richtigen port/Express server. Das funktioniert auch, aber es bedeutet, dass mein base-server ist routing jeden einzelnen HTTP-request (und manuell umleiten), und dass meinen Benutzern finden Sie unter meine apps als hosted [hostname.com]:8000.
Nach ein bisschen recherche habe ich herausgefunden, dass ich verwenden können, http-proxy für meine routing-Anforderungen, aber ich würde noch gerne wissen, ob es eine best practice für den Betrieb mehrerer Server Express auf dem gleichen system. Hier ist, wie ich Plane, es zu tun:
Jede web-app über einen eigenen Ordner, mit einem kompletten Express-Ordner-Struktur (app.js, Routen, Ansichten, etc.) Apps gruppiert nach Domänen, so ein Beispiel-Ordner-Struktur wäre:
hostname.com/
app.js
routes/
views/
...
app1/
app1.js
routes/
views/
...
app2
...
hostname2.com/
app.js
routes/
views/
...
Werde ich auf jeden app.js separat mit Knoten (oder mit für immerdie ich derzeit benutze), und jeder wird haben, um einen anderen port intern, mit Kreuz-app umleitet, wird darauf im Hafen von der Ziel-app.
So, das ist mein Aktueller plan. Was sind die Probleme mit ihm haben, und welche Fallstricke sollte ich versuchen zu vermeiden?
Am wichtigsten ist, ist es eine bewährte Lösung für dieses problem - das problem der hosting-mehrere web-apps auf dem gleichen system mit Knoten.js/Express?
EDIT: ich Plane, um schließlich verwenden Sie WebSockets und HTTPS, und die Bandbreite, die mein setup unterstützen kann ist für mich nicht so wichtig - dies ist eine Entwicklung, die server (zumindest für jetzt). Dank David Ellis für das Thema Erziehung von WebSockets.
ZWEITER EDIT: Danke an beide EhevuTov und David Ellis für Ihre Antworten, die beide sehr geholfen. Ich bin immer noch der Einigung auf eine Allgemeine Struktur für meine Anwendung, und es sieht so aus, dass die Frage gerichtet ist, in einigen Details von diese StackOverflow-Frage
DRITTE EDIT: ich bin gekommen ein ways seit der Veröffentlichung dieser Frage (obwohl ich schon viel weiter zu gehen). Check-out diese Datei in meinem GitHub-repositorydie nutzt, was ich gelernt habe aus den Antworten zu dieser Frage!
InformationsquelleAutor der Frage Aaron | 2012-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit Express verwendet Verbindenich bin mir ziemlich sicher, dass Sie verwenden können, Schließen Sie die virtual-host-middleware. Es arbeitet ähnlich wie andere vhost Module auf andere Produkte. Ich habe nicht mehrere Domänen zu testen und zeigen Ihnen die richtigen code, aber ich denke, dass es so etwas wie dieses:
Wenn man an den Punkt, wo eine Express-server nicht genug ist, dann schauen Sie in die Verwendung der Knoten.Cluster aus der API. Wenn das auch nicht reicht, dann wird die aktuelle Praxis ist, um eine asnyc reverse-proxy wie Nginx in der front von Ihrem Express-Server und Punkt-proxies, um Ihre Express-Server.
InformationsquelleAutor der Antwort EhevuTov
Wenn Sie nicht brauchen, zu verwenden WebSockets (oder ein HTTP 1.1 feature, wirklich), Sie können Sie verwenden NginX als Ihr proxy statt.
Vorteil ist die Gesamtlast NginX verarbeiten kann gegen Knoten ist höher (statisch kompiliert und spezialisiert für diese Art der Sache, grundsätzlich), aber Sie verlieren die Fähigkeit zum streamen von beliebigen Daten (senden kleinere Stücke auf einmal).
Für eine kleinere Website, oder wenn Sie unsicher sind, welche Funktionen Sie in Zukunft benötigen, ist es wahrscheinlich besser, stick mit
node-http-proxy
und schalten nur NginX, wenn Sie nachweisen kann, dass der proxy ist der Engpass auf Ihrem server. Zum Glück NginX ist nicht schwer einzurichten, wenn Sie es später benötigen.InformationsquelleAutor der Antwort David Ellis