Avatar billede dsb Nybegynder
19. maj 2002 - 23:20 Der er 9 kommentarer og
2 løsninger

chat, den kliklyd

jeg sidder og skal til at lave en lille chat.
Inden jeg begynder på den vil jeg dog lige have afklaret hvordan jeg fjerner kliklyden (som kommer når man reloader en side).

Jeg ved godt at lyden ligge på brugerens computer, og at det ikke har noget med min kode at gøre, men kan det ikke lade sig gøre at hente data ud af databasen, uden at skulle reloade siden på normal vis ?

Jeg tænker på Javascript, eller andre alternative forslag.
Avatar billede Slettet bruger
19. maj 2002 - 23:23 #1
Jeg mener at klik lyden kan deaktiveres.....øjeblik.
Avatar billede Slettet bruger
19. maj 2002 - 23:27 #2
Hvordan reloader du pt.?
Avatar billede Slettet bruger
20. maj 2002 - 00:54 #3
Nå men jeg kan fortælle så meget at klik lyden opstår når du opdatere hele siden. Dvs. du må prøve at nøjes med at opdatere en del af siden.
Avatar billede tipsen Nybegynder
20. maj 2002 - 02:29 #4
...har ikke nogen kliklyd på min browser... - sidder selvfølgelig også med Mozilla :-)
Avatar billede otis Nybegynder
20. maj 2002 - 03:30 #5
kontrolpaneler > lyde > start navigation
sæt den til ingen, og så har du ingen lyd ved opdatering.

Du kan hente med et while udput, så du får en slags realtime opdatering
while(nyt_indlæg) {
echo "<b>".$navn."</b>skrev:".$besked."<br>";
}
så tjekker du bare i databasen om seneste id ikke matcher..
jeg har noget her som jeg lavede en gang:

<?
$time = time();
$limit = $time-300;
flush();
$i = 0;
$tid = time() - 10;
while (1) {
    $cont = mysql_query("select * from besked where (id > '$i' && tid > $tid) LIMIT 0,30");
    if (mysql_num_rows($cont) > 0) {
        while ($c = mysql_fetch_array($cont)) {
                echo "<b>".$c[franame]."</b>:".$c[besked]."<br>\n";
            flush();
            $i = $c[id];
        }
    } else {
        echo " ";
    }
    flush();
    sleep(1);
}
?>
Avatar billede emileej Nybegynder
20. maj 2002 - 15:55 #6
En lille detalje:
Du bliver nød til at sætte set_time_limit(0); før din while løkke - ellers laver browseren en timeout efter 20 sek. = din chat stopper :)
Desuden:
Din while løkke skal nok hedde:
while(connection_status() === 0){ ...
Så sikrer du at scriptet ikke fortsætter med at køre efter at chatteren er logget af - hvis dette ikke er sat, vil din server med sikkerhed gå ned...

E-)mil
Avatar billede dsb Nybegynder
20. maj 2002 - 18:05 #7
@otis
okey lad mig lige se om jeg har forstået din kode rigtigt:


/* her definerer du en masse variabler ;) */
$time = time();
$limit = $time-300;
flush();
$i = 0;
$tid = time() - 10;

/*laver en uendelighedsløkke, som trækker de nyeste beskeder ud fra databasen.*/
while (1) {
    $cont = mysql_query("select * from besked where (id > '$i' && tid > $tid) LIMIT 0,30");
    if (mysql_num_rows($cont) > 0) {
        while ($c = mysql_fetch_array($cont)) {
                echo "<b>".$c[franame]."</b>:".$c[besked]."<br>\n";
            flush();
            $i = $c[id];
        }
    } else {
        echo " ";
    }
/* og her bliver jeg så lidt usikker. Hvis jeg har forstået det rigtigt bruger du *flush* til at 'gøre bordet rent', bruger *sleep* for at det skal gå et sekund før løkken gentager sig */
    flush();
    sleep(1);
}


Hvis min forståelse af koden er rigtig har jeg bare lige et spørgsmål.
Er det ikke ekstremt krævende for serveren at bare sætte den til at lave en uendelighedsløkke på den måde ?
Hvis der nu er flere online, kan det så ikke hurtigt løbe op ?
Avatar billede emileej Nybegynder
20. maj 2002 - 18:50 #8
Det er meget krævende for serveren - især hvis du ikke smidder de to ting, jeg har skrevet, med ind - altså således:

set_time_limit(0); //Undgå browser timeout
$time = time();
$limit = $time-300;
flush();
$i = 0;
$tid = time() - 10;

while(connection_status() === 0){ //Kør løkken så længe der er forbindelse til brugeren
    $cont = mysql_query("select * from besked where (id > '$i' && tid > $tid) LIMIT 0,30");
    if (mysql_num_rows($cont) > 0) {
        while ($c = mysql_fetch_array($cont)) {
                echo "<b>".$c[franame]."</b>:".$c[besked]."<br>\n";
            flush();
            $i = $c[id];
        }
    } else {
        echo " ";
    }
    flush();
    sleep(1);
}

E-)mil
http://mfp.eej.dk
Avatar billede otis Nybegynder
21. maj 2002 - 06:31 #9
dsb- Du har ret :)
ang at den sløver serveren, det ved jeg nu ikke, jeg kan snildt ha den til at håndtere 10+ klienter på min server, (Linux debian, 200 mhz, 32 mbram) uden at det kan mærkes ..
Men hvis du har en følsom tøseserver f.eks redhat, eller endda et m$ produkt, så kig på hvad emileej skriver :)
Avatar billede emileej Nybegynder
21. maj 2002 - 08:08 #10
Hehe - otis det er i længden sundest for alle servere, at konstruere det, som jeg har vist det - muligvis går serveren ikke ned, men den kører helt klart mere stabilt på min måde :)

E-)mil
http://mfp.eej.dk
Avatar billede dsb Nybegynder
21. maj 2002 - 16:07 #11
@otis
Lad os nu se hvordan der går ;)
jeg kan enten vælge mellem min egen 400 mhz 64 mbram mandrake server, eller mit webhotels 700 mhz 128 mbram win2k.

nå det var vist det, jeg lukker og takker :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester