großes problem - bitte um hilfe - cgi & js...
Harald Kirkhoff
- cgi
hallo,
da ich auf diesem gebiet noch neuling bin und stundenlang im internet gesucht aber nichts gefunden habe :(
frage ich mal hier die spezalisten :)
ich habe folgendes problem:
ich möchte ca. 20 variablen einlesen, teilweise ändern und kombinieren und dann an ein cgiscript übergeben. da aber das cgiscript (intern) mit wartezeiten arbeitet (sprich linear und 60 sekunden wartezeit), möchte ich auch das cgiscript mehrfach ausführen können. der code ist sehr komplex also gebe ich nur angaben zum verständnis.
mal stark vereinfacht
zB. als eingabe
var1 = test1
var2 = test2
var3 = test3
...
nun möchte ich die variable 1 geändert haben in "test2test3test1".
dann soll die variable 1 an das cgi übergeben und ausgeführt werden.
dann übergebe ich auch variable 2 auch geändert "test1test3test2" an das cgiscript und möchte es ausgeführt haben.
z.B. cgiscript (kein code)
...
variablen das 2.te mal anpassen;
sub "rechnen";
60 sek warten;
wenn var xy dann (sub "varsortieren") bis var xyz;
var formatiert ausgeben und 60 sek warten;
...
wenn ich mit <form...> <input...submit...> die variablen ans cgiscript übergebe, würde das ca. 70 tage dauern bis das cgiscript fertig ausgeführt wäre :( da die wartezeiten eingehalten werden müssen.
wie kann ich also nun die modifizerte eingabe mehrmals an ein einzelnes cgiscript übergeben?
in perl kenne ich leider keine möglichkeit (mangel an wissen) und mit js scheint es nicht machbar zu sein. hat irgend jemand eine lösung dafür ->
einmal erfasste und modifizierte variablen mehrfach an ein einzelnes cgiscript zu übergeben und auszuführen? ich brauche nur die möglichkeit (funktion???) um dies realiseren zu können.
so wäre es nur eine frage von minuten ;)
schon mal danke im vorraus!!!
Moin!
ich möchte ca. 20 variablen einlesen, teilweise ändern und kombinieren und dann an ein cgiscript übergeben. da aber das cgiscript (intern) mit wartezeiten arbeitet (sprich linear und 60 sekunden wartezeit), möchte ich auch das cgiscript mehrfach ausführen können. der code ist sehr komplex also gebe ich nur angaben zum verständnis.
Ich verstehe nicht, warum das Skript warten muß. Die Vermutungen gehen dahin, daß irgendetwas gemessen wird, was Zeit braucht, z.B. den radioaktiven Zerfall in einer Minute.
Für solche Zwecke sind aber CGI-Skripte ganz ungeeignet. Denn schließlich werden die nur gestartet, wenn ein Browser diese Ressource anfordert, und der Browser wartet nicht ewig.
Ansonsten: Wenn du schon ein CGI-Skript anschubst, dann übergebe dem Skript alle Variablen und lass es selbst deren Inhalte neu kombinieren und dann Subskripte starten.
Die Lösungsmöglichkeiten hängen von den Fähigkeiten des zu benutzenden Servers ab.
Ich bin trotzdem dafür, daß du nochmal etwas deutlicher erzählst, worum es genau geht. Immer, wenn erzwungene Wartezeit im Spiel ist, sind CGI-Skripte ungeeignet. Gewöhnlich sollte ein Skript in ungefähr 30 Sekunden fertig sein (gerne auch schneller). Länger als 2 Minuten hält wohl kein Browser die Verbindung aufrecht, d.h. stundenlanges Warten geht schon allein deshalb nicht. Zeitaufwendige Vorgänge werden lieber zeitgesteuert aufgerufen und legen die Ergebnisse dann irgendwo auf dem Server ab, damit sie von dort schnell gelesen und ausgeliefert werden können. Ohne Kenntnis, um was es geht, kann dir hier aber niemand einen Lösungsansatz nennen.
- Sven Rautenberg
hi sven,
erstmals danke für deine antwort.
die warte zeiten sind für den bowser unwichtig da die ergebnisse auf dem server gespeichert werden und auch später abrufbar sind.
worum es genau geht möchte ich hier nicht breit treten. ich kann das script starten und die seite auktualiseren und das script erneut aufrufen so das ein zweiter start ermöglicht wird. es ist also möglich das script mehrmals auszuführen und es arbeitet auch weiter wenn der user offline ist ;) nun mein problem ist es jetzt wie ich das script mehrmals gleizeitig aufrufen kann.
thx
Moin!
ich möchte ca. 20 variablen einlesen, teilweise ändern und kombinieren und dann an ein cgiscript übergeben. da aber das cgiscript (intern) mit wartezeiten arbeitet (sprich linear und 60 sekunden wartezeit), möchte ich auch das cgiscript mehrfach ausführen können. der code ist sehr komplex also gebe ich nur angaben zum verständnis.
Ich verstehe nicht, warum das Skript warten muß. Die Vermutungen gehen dahin, daß irgendetwas gemessen wird, was Zeit braucht, z.B. den radioaktiven Zerfall in einer Minute.
Für solche Zwecke sind aber CGI-Skripte ganz ungeeignet. Denn schließlich werden die nur gestartet, wenn ein Browser diese Ressource anfordert, und der Browser wartet nicht ewig.
Ansonsten: Wenn du schon ein CGI-Skript anschubst, dann übergebe dem Skript alle Variablen und lass es selbst deren Inhalte neu kombinieren und dann Subskripte starten.
Die Lösungsmöglichkeiten hängen von den Fähigkeiten des zu benutzenden Servers ab.
Ich bin trotzdem dafür, daß du nochmal etwas deutlicher erzählst, worum es genau geht. Immer, wenn erzwungene Wartezeit im Spiel ist, sind CGI-Skripte ungeeignet. Gewöhnlich sollte ein Skript in ungefähr 30 Sekunden fertig sein (gerne auch schneller). Länger als 2 Minuten hält wohl kein Browser die Verbindung aufrecht, d.h. stundenlanges Warten geht schon allein deshalb nicht. Zeitaufwendige Vorgänge werden lieber zeitgesteuert aufgerufen und legen die Ergebnisse dann irgendwo auf dem Server ab, damit sie von dort schnell gelesen und ausgeliefert werden können. Ohne Kenntnis, um was es geht, kann dir hier aber niemand einen Lösungsansatz nennen.
- Sven Rautenberg
Hi,
worum es genau geht möchte ich hier nicht breit treten.
was Deine Daten bedeuten und wem Du sie verkaufen willst, ist für die Problemstellung irrelevant. Versuche, zu abstrahieren.
ich kann das script starten und die seite auktualiseren und das
script erneut aufrufen so das ein zweiter start ermöglicht wird.
es ist also möglich das script mehrmals auszuführen und es
arbeitet auch weiter wenn der user offline ist ;)
nun mein problem ist es jetzt wie ich das script mehrmals gleizeitig
aufrufen kann.
Mir ist immer noch unklar, _was_ Du erreichen willst. Bisher hast Du nur
geschrieben, _wie_ Du irgend etwas zu erreichen versucht hast, und daß das nicht Deine Anforderungen erfüllt hat.
Deine Andeutungen klingen so, daß mir nicht klar wird, wieso Du überhaupt einen Browser im Spiel hast. Du willst irgendwas auf dem Server berechnen und dort auch speichern - ja, und nun? Wozu der Browser?
Um ein Startsignal zu geben vielleicht? Das kannst Du ganz einfach haben: Laß das CGI-Skript auf dem Server einen Schalter umlegen (beispielsweise eine leere Datei anlegen oder irgendwas in der Art).
Der eigentliche Job für die Berechnung sollte von HTTP völlig unabhängig laufen. Je nachdem, wie genau Du die Startbedingung und die Aufruffrquenz vorhersagen kannst, bieten sich
Du bist in eine bestimmte Implementierungsrichtung gerannt. Wir wissen nicht, wieso. Deine Andeutungen klingen aber so, als solltest Du zuallererst diese Entscheidung überdenken. Die Implementierung im Details ist möglicherweise eine Kleinigkeit, sobald Du den richtigen Ansatz hast. Dir beim Finden desselben zu helfen, erfordert aber die Kenntnis Deiner Aufgabenstellung ...
Viele Grüße
Michael
danke für die antwort.
also ich möchte per html einige daten eingeben. die dann verändert und häppchenweise an ein bestimmtest cgi übergeben werden. ein datensatz benötigt dabei ca. 43min bearbeitungszeit! nun möchte ich aber z.B. 1000 datensätze an das cgi übergeben aber nach meinen kenntnissen kann ich nur die datensätze nacheinander ans cgi übergeben wobei die ermittlung unheimlich viel zeit benötigen würde.
also will ich per html nur einige daten eingeben die dann strukturiert und in datensätzen gefasst gleichzeitig an das cgiscpript übermittelt werden. so dass die 1000 datensätze auf einam l von dem cgi bearbeitet wewrden (multitasking) und es nach ca. 45 min fertig ist und wenn man wieder auf die seite kommt auch gleich die daten abrufen kann.
das blöde dabei ist für die ermittlung brauche ich eine internetverbindung so dass ich es nicht auf meinem rechner laufenlassen möchte, weil meine ressourcen dafür nicht reichen. 1000 connections über 50min kann mein billig rechner nicht leisten :(
hoffe dadurch wird einiges klarer.
thx und frohe ostern
Mir ist immer noch unklar, _was_ Du erreichen willst. Bisher hast Du nur
geschrieben, _wie_ Du irgend etwas zu erreichen versucht hast, und daß das nicht Deine Anforderungen erfüllt hat.
Deine Andeutungen klingen so, daß mir nicht klar wird, wieso Du überhaupt einen Browser im Spiel hast. Du willst irgendwas auf dem Server berechnen und dort auch speichern - ja, und nun? Wozu der Browser?
Um ein Startsignal zu geben vielleicht? Das kannst Du ganz einfach haben: Laß das CGI-Skript auf dem Server einen Schalter umlegen (beispielsweise eine leere Datei anlegen oder irgendwas in der Art).
Der eigentliche Job für die Berechnung sollte von HTTP völlig unabhängig laufen. Je nachdem, wie genau Du die Startbedingung und die Aufruffrquenz vorhersagen kannst, bieten sich
- ein permanent wartender daemon (mit "sleep <sekunden>" und Test auf den Schalter) oder
- ein per cron periodisch gestarteter Prozeß, der ebenfalls den Schalter prüft und bei dessen Fehlen aufhört zu arbeiten
an.
Du bist in eine bestimmte Implementierungsrichtung gerannt. Wir wissen nicht, wieso. Deine Andeutungen klingen aber so, als solltest Du zuallererst diese Entscheidung überdenken. Die Implementierung im Details ist möglicherweise eine Kleinigkeit, sobald Du den richtigen Ansatz hast. Dir beim Finden desselben zu helfen, erfordert aber die Kenntnis Deiner Aufgabenstellung ...
Viele Grüße
Michael
Hi Harald,
also ich möchte per html einige daten eingeben.
Nicht per HTML. Vielleicht in ein mit HTML beschriebenes Formular. Aber "eingeben" nützt Dir nichts, wenn die Daten danach in den Weiten des Universums verschwinden. Schon hier wirst Du die Daten serverseitig annehmen und speichern wollen - und das völlig unabhängig von Deiner nachgeschalteten Verarbeitung.
die dann verändert
Wie? Das kann allerdings bereits Dein Annahme-CGI-Programm erledigen, bevor es die Daten abspeichert.
und häppchenweise an ein bestimmtest cgi übergeben
werden. ein datensatz benötigt dabei ca. 43min
bearbeitungszeit!
Und genau das ist der Punkt, wo Du es nicht wie beschrieben machen solltest.
Trenne Eingabe (und Speicherung) der Daten von deren Verarbeitung in zwei Anwendungen. Die erste wird CGI sein müssen - die zweite sollte es auf keinen Fall sein.
nun möchte ich aber z.B. 1000 datensätze an das cgi
übergeben aber nach meinen kenntnissen kann ich nur
die datensätze nacheinander ans cgi übergeben wobei
die ermittlung unheimlich viel zeit benötigen würde.
Mußt Du die Datensätze einzeln erfassen?
Anders formuliert: Ist für die Erfassung der Daten ein Dialog erforderlich, welcher für die Konsistenz bzw. Korrektheit der Eingabe signifikant ist? (Bei Online-Banking wäre das beispielsweise der Fall - da wird jede Eingabe sofort gegen den gespeicherten Stand geprüft, um den Benutzer nicht in die falsche Richtung zu schicken.)
Du könntest durchaus 1000 lokal erfaßte Daten via HTTP als Datei auf den Server laden - und Dein Auswertungprogramm könnte automatisch loslaufen, sobald es die Existenz dieser Datei bemerkt.
so dass die 1000 datensätze auf einam l von dem cgi
bearbeitet wewrden (multitasking) und es nach ca. 45
min fertig ist und wenn man wieder auf die seite
kommt auch gleich die daten abrufen kann.
Dazu muß die Auswertung aber nicht durch ein CGI-Programm erfolgen. Es reicht aus, wenn Du ein drittes kleines CGI-Programm hast, welches die Ergebnisse anzeigt, sobald auf dem Server welche berechnet worden sind, und eine entsprechende Meldung, falls dies noch nicht der Fall ist.
45 Minuten Sitzungszeit für CGI sind unzumutbar. Dein Gesamtsystem würde durch eine solche Abhängigkeit einfach zu instabil.
das blöde dabei ist für die ermittlung brauche ich
eine internetverbindung
Genau das verstehe ich nicht. Nachdem die Daten eingegeben sind, kann Dein 2. Programm doch völlig unabhängig vom Rest der Welt auf dem Server losrechnen.
so dass ich es nicht auf meinem rechner laufenlassen
möchte, weil meine ressourcen dafür nicht reichen.
1000 connections über 50min kann mein billig rechner
nicht leisten :(
Ich verstehe nicht, wieso Du 1000 Connections haben kannst.
Ich dachte, Du selbst gibst diese 1000 Daten ein!
Falls die Daten von 1000 verschiedenen Besuchern eingegeben werden, bricht Dein gesamtes Konzept zusammen. Denn dann kannst Du nicht mehr alle Daten in einem gemeinsamen Arbeitsgang verarbeiten, weil dann Eingabe- und Verarbeitungsphase einander zeitlich überlappen. Ist dies der Fall? Diese Frage zu klären ist fundamental für Deinen gesamten Entwurf ...
hoffe dadurch wird einiges klarer.
Vieles ist noch unklar - aber Du siehst, ich konnte immerhin sehr viel spezifischere Fragen stellen.
Dein System sieht relativ komplex aus. Um so dringender solltest Du Dich auf das Systemdesign konzentrieren und nicht zu früh auf Realisierungstechniken wie CGI festlegen. Es kann in diesem Stadium immer noch passieren, daß CGI Deine Anforderung überhaupt nicht erfüllen kann.
Investiere in eine exakte Aufgabenstellung - bei großen Projekten macht die eigentliche Realisierungsphase nach meiner Erfahrung etwa 30% aus, mehr nicht.
Viele Grüße
Michael