2017-06-14 19 views
0

Ich arbeite mit 3 Dateien in Nodejs. File1.js1 has a Zähler = 11 und getter() setter(). File2.js setzt den Wert auf counter=10. Aber wenn ich den Wert des Zählers in File3.js abrufen kann ich den alten Wert 1, anstatt was von File2 gesetzt wurde.Knotenvariable wird zurückgesetzt

//=====File1.js===== 

var store = module.exports = { 
    counter: 1, 
    getCounter: function() { 
     return store.counter; 
    },  
    setCounter: function (value) { 
     store.counter = value; 
    } 
} 

//=====File2.js===== 

var c = require('./File1');  
c.setCounter(10);  
console.log(c.getCounter()) //prints 10 

//=====File3.js===== 

var c = require('./File1');  
console.log(c.getCounter()) //prints 1 

Dies scheint ein einfaches und unverändertes Konzept. Ich denke, das Problem ist hier und ich weiß nicht, wie ich es lösen soll.

Datei1 und Datei2 laufen auf Node-Service-1 (verfügbar unter http://localhost:1000) und Datei3 läuft auf Node-Service-2 (verfügbar unter http://localhost:1100).

In einem typischen Szenario greifen mehrere Benutzer auf Node-service-1 und Node-service-2 zu, und nur der erste Benutzer erhält 1000 zur Verfügung. Ich habe das portfinder Paket verwendet, um den nächsten verfügbaren Port zu erhalten, und Node-service-1 für User2 auf 1001 ausgeführt. Node-service-2 weiß jedoch nicht, dass User2 den Dienst auf Port 1001 ausführt und versucht, 1000 falsch abzurufen (für User2) und scheitert.

Die Frage ist also, woher kennt Node-service-2 den Port, auf dem Node-service-1 läuft?

Antwort

0

Wenn file3.js läuft auf einem anderen Knoten Instanz file2.js dann wird es eine andere Instanz des Moduls file1.js sehen, dass der eine file2.js sieht. Folglich können Sie diese Methode nicht für die Kommunikation zwischen den beiden Skripten verwenden, wenn sie auf separaten Knotenexemplaren ausgeführt werden. Wenn Sie zwischen zwei Skripten auf zwei Knoteninstanzen kommunizieren müssen, müssen Sie entweder einen Socket, einen gemeinsamen Speicher oder eine gemeinsame Datei (z. B. eine gemeinsame Datenbank) verwenden, um zu kommunizieren.

+0

Ich glaube, für Socket-Verbindung muss ich auch den Port kennen, auf dem Node-Service-1 ausgeführt wird. Ist das korrekt ? – mehtak

+0

Nun, Sie müssten einen Socket-Listener für eine Knoteninstanz implementieren und dann Code für die andere Instanz mit der richtigen Portnummer verbinden. Es wäre wahrscheinlich sinnvoller, die verschiedenen verfügbaren Optionen für die Kommunikation zwischen Knoteninstanzen zu untersuchen und eine vorhandene Lösung zu wählen, die Ihren Anforderungen am besten entspricht. –

+0

Danke @Julian Goacher Ich werde es weiter untersuchen. – mehtak

Verwandte Themen