HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Webszerver és a felhasználó közötti kapcsolat aktuális sebességének mérése


Példaprogram letöltése

85679 bájt

Hozzunk létre most egy olyan webes alkalmazást, mely képes arra, hogy megállapítsa, hogy webszerverünk és az adott felhasználó között aktuálisan mekkora a sávszélesség, vagyis hány kB tölthető le másodpercenként. Ehhez készítünk egy teszt oldalt, melyet a felhasználónak le kell töltenie, és így meg tudjuk határozni azt, hogy mennyi volt a letöltés ideje és annak sebessége.

Az így megállapított sebesség persze állandóan változó lesz, akkor is ha ugyanaz a szerver és ugyanaz a kliens között mérjük, mivel a sebesség nagyban függ azokon az internetes szervereken, melyeken áthalad a web oldalunk a saját szerverünk és a kliens között.
Mellékelt példa megnyitása előtt szükséges egy DownloadSpeed nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A megvalósítást a következő módon végezzük el: készítünk egy web oldalt, melyre elhelyezünk egy viszonylag nagyméretű képet. Amikor a felhasználó letölti ezt az oldalt, akkor tároljuk az aktuális időpontot a Session-re. Az oldalt úgy készítjük el, hogy amint az letöltődött, szimulálja a Button1 nyomógombra történő kattintást. Ekkor egy újabb kérés indul el szerverünk felé, ahol alkalmazásunkban létrejön a Button1-hez tartozó Click esemény. Ekkor ismét eltároljuk a Session-re az aktuális időpontot. E két időpontból és az első web oldal méretéből már számítható az eredmény.
Ez az eredmény valamelyest eltér a tényleges letöltési sebességtől, mivel a szerverünk irányába kétszer történik kérés a Button1 nyomógomb Click eseménye miatt. Ennek a második kérésnek az időtöbblete viszont elhanyagolható, mivel az első web oldal letöltésénél lévő nagyméretű kép miatt nagyságrenddel több idő szükséges annak eléréséhez.
Az első web oldal Load eseményénél tároljuk el a kezdeti időpontot, abban az esetben, ha még nem történt meg a nyomógombra való kattintás. Az időpont tárolásához a DateTime osztály Now property-jének Ticks property-jében lévő értéket használjuk fel, mely 1. év január 1-től eltelt időt adja 100 ns időközben számlálva.
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (!IsPostBack)
      {
        Session.Add("startTime", DateTime.Now.Ticks);
      }
    }
A WebForm1 HTML kódjában végzünk el egy változtatást, annak érdekében, hogy a lap letöltődése után szimulálva legyen a Button1 nyomógombra történő kattintás. Ehhez a BODY elemben létrehozunk egy onload eseményt, melyben meghívjuk a Button1 nyomógomb Click függvényét, amely egyenértékű a nyomógombra történő kattintással.
  <body MS_POSITIONING="GridLayout" onload="document.all.Button1.click()">
Amikor létrejön a Click esemény, akkor eltároljuk az aktuális pillanat értékét, és átirányítjuk a felhasználót a WebForm2-re, ahol kiszámítjuk az eredményt.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      Session.Add("endTime", DateTime.Now.Ticks);
      Response.Redirect("WebForm2.aspx");
    }
Itt lekérdezzük két változóba a kezdő és befejező időpontot, majd kiszámítjuk ezek különbségét.
    private void Page_Load(object sender, System.EventArgs e)
    {
      long start = (long)Session["startTime"];
      long end = (long)Session["endTime"];
      long time = end - start;
Először kiírjuk a letöltés idejét másodpercben.
      Label1.Text = "Letöltés ideje másodpercben: " + ((double)time/10000000).ToString();      
      if (time == 0)
      {
        Label2.Text = "Letöltés sebessége nem mérhető";
      }
      else
      {
Majd ezt követően kiszámítjuk a letöltés sebességét. Ehhez ismernünk kell a letöltött oldal méretét, mely jelen példánknál 75028 bájt. Mivel az eredményt kB/s-ban szeretnénk megadni, így ezt az értéket átszámítjuk kB-ra, mely 73.26953125 lesz.
        double d = 73.26953125 / ((double)time / 10000000);    
        Label2.Text = "Letöltés sebessége kB/s-ben: " + d.ToString();
      }
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 569. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |