socket anfragen
uheid
- php
0 dedlfix
0 Der Martin
Hi,
ich möchte ein PHP-Skript erstellen, dass mit Hilfe von Sockets (fsockopen() ) Daten von einem anderen Rechner auf meinen überträgt.
d.h.
for($i=0; i<50000; $i++)
fsockopen()
fwrite()
fread()
fclose()
doSomethingSerious()
Wie man sieht mache ich das ca. 50.000 mal. Also Socket öffnen, Parameter übergeben, lesen, Socket schliessen, Daten verarbeiten. Was denkt ihr, wie lange das Skript rechnen wird? Die Antworten sind jeweils nur wenige 100 kb gross.
Viele schöne Grüße!
uheid
Hi!
ich möchte ein PHP-Skript erstellen, dass mit Hilfe von Sockets (fsockopen() ) Daten von einem anderen Rechner auf meinen überträgt.
Wie man sieht mache ich das ca. 50.000 mal. Also Socket öffnen, Parameter übergeben, lesen, Socket schliessen, Daten verarbeiten. Was denkt ihr, wie lange das Skript rechnen wird? Die Antworten sind jeweils nur wenige 100 kb gross.
Also ungefähr, mindestens, wenn nicht sogar noch mehr.
Niemand wird dir ernsthaft diese Frage beantworten können, denn das Ergebnis hängt entscheidend von der Antwortgeschwindigkeit der Gegenstelle ab. Du kannst das Verfahren beschleunigen, indem du nicht nur jeweils eine Verbindung abwartest sondern mehrere parallel laufen lässt. Das würde ich aber mit den Socket-Funktionen aufsetzen wollen.
Was mich aber interessieren tät, wieso und wohin du 50000 Verbindungen öffnen willst?
Lo!
Hi,
ach, ich hatte vergessen zu schreiben, dass ich keinen exakten Wert hören will, sondern nur etwas in der Art: mindestens 1 Stunde, bei schlechter Verbindung 4 Stunden. Oder gar nur 20 Minuten? Ich habe also keine Ahnung, wie lange sowas überhaupt braucht....
Ah, aber die Socketfunktionen scheinen interessant zu sein.
Warum ich so viele Verbindungen brauche? Weil ich soviele Daten abgreifen muss, und jeder Datensatz erfordert eine extra Anfrage :(
Hi!
ach, ich hatte vergessen zu schreiben, dass ich keinen exakten Wert hören will, sondern nur etwas in der Art: mindestens 1 Stunde, bei schlechter Verbindung 4 Stunden. Oder gar nur 20 Minuten? Ich habe also keine Ahnung, wie lange sowas überhaupt braucht....
Wie lange dauert im Durchschnitt das Beantworten eines Requests? Das mal 50000 wird dir ein Schätzergebnis bringen. Wenn man mal beispielsweise von 1 Sekunde ausgeht, sind das schonmal knapp 14 Stunden. Und so weiter.
Warum ich so viele Verbindungen brauche? Weil ich soviele Daten abgreifen muss, und jeder Datensatz erfordert eine extra Anfrage :(
Willst du Matthias L. Konkurrenz machen? Willst du nicht lieber bei der Menge mit dem Serverbetreiber direkt in Kontakt treten und um einen Abzug der Daten bitten?
Lo!
Danke für Eure Antworten! So oder so ähnlich hatte ich auch gerechnet.
@Dedlfix
Keine Sorge:) Es handelt sich um einen Produktkatalog (elektronische Bauteile) und der Serverbetreiber stellt mir die Daten nur in dieser Form zur Verfügung. Als Antwort bekomme ich jeweils XML-Feeds. Diesen Katalog muss ich up to date halten und einmal wöchentlich importieren.
Nun möchte ich natürlich die Rechen- und Wartezeit so gering wie möglich halten.
Herzlichen Dank!
uheid
Hallo,
Wie man sieht mache ich das ca. 50.000 mal. Also Socket öffnen, Parameter übergeben, lesen, Socket schliessen, Daten verarbeiten. Was denkt ihr, wie lange das Skript rechnen wird?
wahrscheinlich nicht gar so lange, die meiste Zeit wird es mit Warten verbringen. Wenn ich mal optimistisch von einer Antwortzeit von 0.1s ausgehe, sind das immerhin schon 5000s, also weit über eine Stunde, die dein Script nur mit Warten verbringt.
Und in der Praxis dürfte so mancher Host länger als 0.1s auf sich warten lassen.
Die Antworten sind jeweils nur wenige 100 kb gross.
Das fällt ja gegenüber der systemimmanenten Antwortzeit kaum ins Gewicht.
Ciao,
Martin
Hallo Martin,
Und in der Praxis dürfte so mancher Host länger als 0.1s auf sich warten lassen.
Die Antworten sind jeweils nur wenige 100 kb gross.
Das fällt ja gegenüber der systemimmanenten Antwortzeit kaum ins Gewicht.
hmm, zu meinen 56k-Modem-Zeiten war ich mit 4 Kilobyte/Sekunde zufrieden. Gehe ich hier von 300 Kilobyte [1] aus, wäre schon eine Übertragungszeit von 75 Sekunden erforderlich.
Bei einem Übertragungsvolumen im zweistelligen Gigabytebereich darf man die reine Übertragungszeit nicht unterschätzen, das dauert selbst im LAN noch 'ne Weile.
Freundliche Grüße
Vinzenz
[1] Ich gehe davon aus, dass kb Kilobyte und nicht Kilobit heißen soll.
Hallo Vinzenz,
Die Antworten sind jeweils nur wenige 100 kb gross.
Das fällt ja gegenüber der systemimmanenten Antwortzeit kaum ins Gewicht.
hmm, zu meinen 56k-Modem-Zeiten war ich mit 4 Kilobyte/Sekunde zufrieden.
ja, das das waren noch Zeiten ...
4kBps war mit einem Modemzugang schon recht brauchbar, ab und zu kam man durch die modeminterne Kompression sogar auf über 6kBps. Aber das war eher die Ausnahme.
Gehe ich hier von 300 Kilobyte [1] aus, ...
Das ist sehr niedrig gegriffen; selbst mit meinem 6Mbit-DSL-Anschluss komme ich auf etwa 600..700kBps, wenn der Server schnell genug liefert. Server im Rechenzentrum mit guter Netzanbindung dürften untereinander ein Vielfaches davon schaffen. Gehe ich beispielsweise von einer Gigabit-LAN-Anbindung aus, dann könnten 100kB rechnerisch in etwa 1ms übertragen sein. Gegenüber einer Totzeit (Antwortzeit) von deutlich über 100ms ist das vernachlässigbar, finde ich.
wäre schon eine Übertragungszeit von 75 Sekunden erforderlich.
Hmm. Der Rechnung kann ich nicht ganz folgen. Aber egal wie deine 75 Sekunden zustandekommen - sie sind gegenüber >5000s Wartezeiten immer noch Peanuts. Oder etwa nicht?
Bei einem Übertragungsvolumen im zweistelligen Gigabytebereich darf man die reine Übertragungszeit nicht unterschätzen, das dauert selbst im LAN noch 'ne Weile.
Ja: 50'000 * 100kB sind etwa 5GB. Das habe ich über mein 100Mbit-LAN in etwa 10min rübergeschoben.
[1] Ich gehe davon aus, dass kb Kilobyte und nicht Kilobit heißen soll.
Ja, bei der Angabe von Datenmengen gibt man üblicherweise Bytes an, bei Übertragungsbandbreiten dagegen meistens Bits.
So long,
Martin