• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Denkfehler bei asynchronen Ablauf

xorg1990

New member
Hi, ich glaube ich habe ein Logikfehler in NodeJS.

Ich möchte mit Express.js einen kleinen Server aufsetzen. Es handelt sich dabei um 3 Seiten
2 davon sind Formulare.

Jetzt wollte ich aber auf den Einsatz einer Template Engine verzichten weil viel zu umfangreich.
Also habe ich nach einer andren einfahren Lösung gesucht und habe eine Funktion geschrieben, die die Formular Dateien je nach Fehler abändert.


Code:
function modifyForms(content,msg, cb){
	var count = 0;
	var data = "";
	if(content === "login"){
	linereader.eachLine(__dirname + "/temp/23-dark-login-form/index.html", function(line,last){
		count++;
		if(count == 28){
			data+= "\n";
			  data+='	<p class="error-msg">'+msg+'</p> \n';
		}
		data+=line;
		data+= "\n";
		if(last==true){
			return cb(data);
		}
	});
	}else{
		linereader.eachLine(__dirname + "/temp/register-form/register.html", function(line,last){
			count++;
			if(count == 41){
				data+= "\n";
				  data+='	<p class="error-msg">'+msg+'</p> \n';
			}
			data+=line;
			data+= "\n";
			if(last==true){
				return cb(data);
			}
		});
	}
}

Nun habe 2 Routes, login und register wo eine Validierung abläuft Tippt einer was falsch ein wird modifyForms aufgerufen der Content entsprechend abgeändert und die response ausgeführt.


Was passiert wenn parallel Route login und Register getriggert werden?
Nicht das am ende der User vom Login das Registrierungsformular zu Gesicht bekommt:eek:

Oder gibt es kein wirkliches gleichzeitig/parallel im Netzwerk und es passiert einfach nix... alles gut. :icon6:
 
Auch in NodeJS gibt es (normalerweise) nur einen Thread und deswegen kann nichts gleichzeitig passieren...
 
Ach ja stimmt, daran habe ich gar nicht mehr gedacht.
Aber würde das nicht bedeuten, das beim gleichzeitigen connect mehrer Clients immer irgendwer hinten rangestellt wird?
Wiederum bedeutet das, dass irgendwo ein Array mit Connects erstellt wird was je nach anfragen immer größer wird. bis zum Crash:eek:

Genau genommen macht dann Nodejs nichts besser als Apatche/php.
Ob ich nun Apache heiße und pro Käufer auch Verkäufer einstell oder nur einen Verkäufer habe und die Schlange wird immer länger, macht ja dann kein unterschied in Sachen Ressourcen schonen.
 
Ach ja stimmt, daran habe ich gar nicht mehr gedacht.
du kannst auch threads erstellen oder childprozesse, ändert aber nichts an der tatsache, dass dein tcp stack alles serialisiert.

Aber würde das nicht bedeuten, das beim gleichzeitigen connect mehrer Clients immer irgendwer hinten rangestellt wird?
ja

Wiederum bedeutet das, dass irgendwo ein Array mit Connects erstellt wird was je nach anfragen immer größer wird.
der empfangspuffer des tcp-stacks

nennt sich dann https://de.wikipedia.org/wiki/Denial_of_Service

Genau genommen macht dann Nodejs nichts besser als Apatche/php.
warum auch?

Ob ich nun Apache heiße und pro Käufer auch Verkäufer einstell oder nur einen Verkäufer habe und die Schlange wird immer länger, macht ja dann kein unterschied in Sachen Ressourcen schonen.
verstehe ich nicht

wenn du ein riesen projekt hast mit mehreren servern, die auf der selben datenbasis arbeiten, dann erst musst du dir gedanken um die konsistenz der DATEN (nicht der request-response zuordnung, das erledigt das bs für dich) machen
 
tsseh schrieb:
So wird es in den Medien ja meist dargestellt, aufgrund der Event-loop bla bla bla ist Nodejs schneller als Apache.

tsseh schrieb:
verstehe ich nicht
Das war bildlich gesprochen oder wie erklärst du andren Personen was threads sind?

Vor vielen, vielen Moden zu einem php Lehrgang wurde mir erklärt:
Apache Stellt immer so viele Arbeiter(threats) ein wie gerade anfragen da sind.

Nach deinem aussagen Frage ich mich mit welchen sinn?
Wenn eh nur einer anfangen kann, braucht Apache ja auch nur einen thread aufmachen, wiegelt alles ab macht den thread wider zu, lässt den nächsten rein usw.


tsseh schrieb:
wenn du ein riesen projekt hast mit mehreren servern,
Nee, wird nicht passieren.

tsseh schrieb:
das erledigt das bs für dich
bs? Betriebssystem?.
 
So wird es in den Medien ja meist dargestellt, aufgrund der Event-loop bla bla bla ist Nodejs schneller als Apache.
noch nie gehört

Das war bildlich gesprochen oder wie erklärst du andren Personen was threads sind?
ja, soweit bin ich noch mitgekommen, aber warum soll der, der mehrere threads unterstützt um mehrere anfragen gleichzeitig abzuarbeiten dann nicht besser sein als der, der nur einen thread hat(was node nicht haben muss, du musst nur alles ausprogrammieren was apache nativ - und damit schnell - hat)?

Nach deinem aussagen Frage ich mich mit welchen sinn?
weil du dann, nachdem du den 1. request aus dem puffer gelesen hast und dabei bist ihn abzuarbeiten, gleich den 2. aus dem puffer lesen kannst und diesen parallel abarbeiten kannst und den 3. dann auch noch ...

Wenn eh nur einer anfangen kann, braucht Apache ja auch nur einen thread aufmachen, wiegelt alles ab macht den thread wider zu, lässt den nächsten rein usw.
anfangen kann immer nur einer nach dem anderen, aber wärend der 1. läuft, kann schon der nächste anfangen.
das ganze macht also sinn, wenn du lange requestbearbeitungszeiten hast. also bearbeiten im sinne von rechnen. bei reinen io-operationen wirst du dich vermutlich eher behindern. also wenn du nur bilder von der platte liest und das auf mehrere threads aufteilst bist du bild für bild vermutlich schneller als alle parallel zu lesen. erzeugst du die bilder mit einer scriptsprache erst aus daten, kannst du durch parallelisierung die geschwindigkeit erhöhen.
 
tsseh schrieb:
anfangen kann immer nur einer nach dem anderen, aber wärend der 1. läuft, kann schon der nächste anfangen.
das ganze macht also sinn, wenn du lange requestbearbeitungszeiten hast. also bearbeiten im sinne von rechnen. bei reinen io-operationen wirst du dich vermutlich eher behindern. also wenn du nur bilder von der platte liest und das auf mehrere threads aufteilst bist du bild für bild vermutlich schneller als alle parallel zu lesen. erzeugst du die bilder mit einer scriptsprache erst aus daten, kannst du durch parallelisierung die geschwindigkeit erhöhen.
Alles klar.

Also kann ich weiter arbeiten wie gehabt.
 
Zurück
Oben