Wie tatsächliche Übertragungsrate zu Clients festellen

joedelord

joedelord

Aktives Mitglied
Thread Starter
Dabei seit
12.12.2002
Beiträge
492
Reaktionspunkte
0
Hallo Liebe Macuser,

Im heutigen Thema geht es um eine (noch, genaueres unten) eher theoretische Frage;

Wie kann ich via PHP, von einem Server aus auf dem ganz normal Webspace gemietet wurde, die tatsächliche Übertragungsrate zu den Clients ermitteln?

Der Hintergrund der Frage ist, dass ich in meim kommen Projekt die tatsächliche Übertragungsrate ermitteln will, um so den Content besser an die Zielgruppe anzupasse. Soweit ich weiß lässt sich auch über JS einiges in diese Richtung machen, jedoch spielgeln diese Angaben glaube ich nicht die TATSÄCHLICHE Übertragungsrate wieder.

Also wer hat Ideen oder kennt tools mit denen man diese Funktion bewerkstelligen kann.

lg, joedelord

PS: die Frage ist desshalb nich theoretischer Natur, da ich noch keinen Webspace gemietet habe. Das passiert erst kurz vor dem Start etwa mitte August.
 
Hier gibt's ne Seite mit Speedtests. Die sollten Dir zeigen, was möglich ist, dann kannst Du Dich genauer informieren.

Meines Erachtens sind die immer sehr ungenau.
 
Vielen Dank soeweit dafür, bloß wie kann ich selbst so einen Test implementieren (Abgesehen von einer Flash Lösung) am besten mit php.

lg, joedelord
 
Wie schon angemerkt: Es ist zum einen ungenau zum anderen könnte eine solche Messung die Leute eher nerven als ihnen nützen.

Nur so ´ne Idee: Wenn der Server den Systemruf gettimeofday() kennt, bzw. die PHP-Version die microtime() Funktion unterstützt, könntest Du die Zeit in Mikroskunden zwischen zwei Seitenanforderungen folgendermaßen messen und den Durchsatz leicht berechnen:

HTML:
<?php
//------------------------------------------------------------
// index.php
//------------------------------------------------------------
$millis=microtime();
?>
<html>

<!-- Inhalt bekannter Groesse Start -->
<head><title>Hallo</title></head>
<body>

<form name="perf" method="POST" action="test.php">
<input type="hidden" name="value" value=<?php print("\"".$millis."\""); ?> > 
</form>

<!-- Inhalt bekannter Groesse Ende -->

<script type="text/javascript">document.forms.perf.submit()</script>
</body>
</html>

HTML:
<?php 
//------------------------------------------------------------
// test.php
//------------------------------------------------------------
$now=explode(' ',microtime());
$difftime=-1;
if ( isset ( $_POST['value'] )) 
{ 
	$start = explode(' ',$_POST['value']);
	$usec = $now[0]-$start[0];
	$sec = $now[1]-$start[1];
	
	if ( $usec < 0 )
	{ 
		$sec--; 
		$usec = -$usec;
	}
	
	$difftime=$sec+$usec;
}

//------------------------------------------------------------
// ab hier z. B. automatische Weiterleitung...
//------------------------------------------------------------
?>

<html>
	<head><title>test</title></head>
	<body>
		<?php echo htmlentities ($difftime); ?>
	</body>
</html>

Vielleicht liesse sich das auch in ein unauffälliges Frame auf der Seite packen, so dass die Zielgruppe die Messung gar nicht mitbekommt.
 
Zuletzt bearbeitet:
Die Idee finde ich schon sehr gut, aber...

Wird damit nicht nur die Zeit berechnet die der Parser braucht, und die Datei zu parsen und in den Ausgangspuffer zu schreiben? Ich habe leider nur rudimentäre Kenntisse von der Apache Arbeitsweise, weshalb meine Fragen vielleicht etwas substanzlos sind.

Vielen dank, das bringt mich dem Ziel schon ein bischen näher ... this is one smal step for a man, but one big leap für mich!

lg, joedelord
 
joedelord schrieb:
Wird damit nicht nur die Zeit berechnet die der Parser

Was da im Detail passiert:
1. Server erhält HTTP-Request und merkt sich Zeitpunkt (Systemzeit/UNIX-Timestamp auf Server).
2.) Server schickt Daten mit bekannter Größe, u.a. "verstecktes" Formular mit Systemzeit aus 1.) als Parameter und Sendescript als letztes "Kommando".
3.) Client schickt gezwungenermaßen Formular sofort zurück.
4.) Server empfängt Formular von Client und kann Zeitdifferenz berechnen.

Der ermittelte Zeitraum ist die benötigte Zeit für die Übertragung. Klar ist, dass das sehr ungenau ist und nur grobe Rückschlüsse auf die Übertragungskapazität zulässt.

Aber klappen tut das grundsätzlich.
 
mir würde nur einfallen ein 1x1 pixel flash kurz laufen zu lassen mit sagen wir einer 300kb datei drinnen ... er stoppts die zeit mit die flash braucht um diese 300kb zu laden und errechnet sich dadurch die rate zum clienten und übergibt per post oder get die daten an das nächste php file das dies dann verwerten kann
 
Die Flashlösung scheint mir auch die einfachste, vor allem ist sie vom Server unabhängig. Einziges Problem... ich habe leider keine Flashlizenz, und nur dafür die ca 250 Aufpreis zum Adobe Web Studio Edu Packet wollte ich mir nicht leisten.

Weitere Frage; (sehr utopisch ich weiß. Es geht aber nur um das Konzept)
Wenn mich irre werden Bilder im zuge eines eigenen HTTP-Request übertragen. Wenn es nun gelänge die Zeit zu bestimmen die für die Übertragung eines Bildes aufgewandt wird könnte man so doch auf die Übertragungsrate schließen. Wobei sich wiederum die Frage ergiebt ob moderne Browser immer ein Bild nach dem anderen anfordern oder ob diese Request parallel laufen?

lg, joedelord
 
joedelord schrieb:
Die Flashlösung scheint mir auch die einfachste, vor allem ist sie vom Server unabhängig.
Ich glaube, unsere Auffassungen von "Einfachheit" sind stark divergent. ;) Für das bisschen Messung einen Flash-Server?

joedelord schrieb:
Wenn es nun gelänge die Zeit zu bestimmen die für die Übertragung eines Bildes aufgewandt wird könnte man so doch auf die Übertragungsrate schließen.
Das funktioniert genau einmal, denn Browser cashen meist die Bilder.

joedelord schrieb:
Wobei sich wiederum die Frage ergiebt ob moderne Browser immer ein Bild nach dem anderen anfordern oder ob diese Request parallel laufen? lg, joedelord
Das lässt sich machen, indem Du den Browser indirekt veranlasst, die Bilder vorzuladen, z. B. indem Du sie in einem JavaScript-Array referenzierst. Das könntest Du wunderbar in meinem simplen Script unterbringen... ;)

Wenn Du höheren Aufwand betreiben willst, schreib ein Java-Applet. Das kann die Zeit millisekundengenau messen und könnte sogar cool aussehen und sinnvolle Inhalte einblenden.
 
Zuletzt bearbeitet:
Zurück
Oben Unten