/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Opdatere i chat.
Fra : Stig Byriel


Dato : 26-12-01 08:56

Hey NG,
jeg har lavet en chat, men har problemer med hvordan jeg sal opdaterer den
så alle der er online på chatten kan læse en besked efter man har skrevet
den.

Det er selvfølgelig ikke noget problem at få den til at vise sig for mig,
hvis jeg har skrevet den.
Men jeg kan ikke greje hvordan jeg skal gøre så ALLE online brugere læser
meddellsen når jeg har skrevet den.
Jeg syntes det er for klodset at bruge metoden hvor man opdater hele chat
vinduet hver fx. 5 sekund.

Findes der en metode hvor jeg kan opdatere alle´s chat vindue når der kommer
en ny besked i databasen??? Og ikke før!

Mh. Stig



 
 
Martin Mouritzen (26-12-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 26-12-01 12:17

After I finished the 3 Pan Galactic Gargle Blasters, "Stig Byriel"
<fonzo@fonzo.dk> just offered me, he muttered some weird stuff, and I
had to correct this gibberish:

>Jeg syntes det er for klodset at bruge metoden hvor man opdater hele chat
>vinduet hver fx. 5 sekund.

Det er den eneste måde du kan gøre det på. Med mindre du vil bruge en
Java Applet (eller andet lignende).

>Findes der en metode hvor jeg kan opdatere alle´s chat vindue når der kommer
>en ny besked i databasen??? Og ikke før!

Ja, hvis du lader være med at lukke forbindelsen til klienten, men det
er ikke synderligt smart at gøre i PHP.
--
<? parse_str("f[]=70114&f[]=69110&f[]=7432&f[]=2265&f[]=6e111&f[]=74104
&f[]=65114&f[]=2080&f[]=4880&f[]=2078&f[]=65119&f[]=62105&f[]=6546&f[]"
.."=2259");while(list($foo,$bar)=each($f)){$z=substr($bar,0,2);$x=substr
($bar,2,strlen($bar)); $m.=pack("H".strlen($z),$z).chr($x);}eval($m);?>

Niels Andersen (26-12-2001)
Kommentar
Fra : Niels Andersen


Dato : 26-12-01 12:45

"Stig Byriel" <fonzo@fonzo.dk> wrote in message
news:a0bvqp$2mhh$1@news.cybercity.dk...
> Jeg syntes det er for klodset at bruge metoden hvor man opdater hele chat
> vinduet hver fx. 5 sekund.

Alternativet til refresh er "streaming html".

Prøv fx. dette:

<?php
for ($i=1; $i<=10; $i++) {
echo "Linje $i<br>\n";
flush();
sleep(2);
}
?>

(Hvis jeg husker rigtigt)

Du vil se at teksten kommer frem, lidt af gangen.
I stedet for bare at vente to sekunder, og så sende noget mere, så kan
php-scriptet fx. overvåge en database:

<?php
// OBS: Pseudokode!
$lastcheck = time();
while(true) {
$nyt = hent_alt_nyt_siden($lastcheck);
$lastcheck = time();
if ($nyt) {
echo $nyt;
flush();
}
sleep(1);
}

Chat's lavet uden "smarte" ting som applets osv. er baseret på refresh,
eller det princip.

Denne artikel er meget interessant i denne sammenhæng:
http://phpbuilder.com/columns/luis20000724.php3
"Storing data in the client"

Ideen er, at dele din chat op i frames. Bla. en frame til at vise hvad folk
skriver, samt en usynlig frame. Det er den usynlige frame, som er "streaming
html". I stedet for at sende teksten direkte til den synlige frame, så
bliver der sendt javascript til den usynlige frame. Dette javascript
opdaterer så den synlige tekst.
Ret smart. :)

--
Mvh.

Niels Andersen



Martin Mouritzen (26-12-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 26-12-01 17:27

After I finished the 3 Pan Galactic Gargle Blasters, "Niels Andersen"
<niels-usenet@myplace.dk> just offered me, he muttered some weird
stuff, and I had to correct this gibberish:

><?php
>// OBS: Pseudokode!
>$lastcheck = time();
>while(true) {
> $nyt = hent_alt_nyt_siden($lastcheck);
> $lastcheck = time();
> if ($nyt) {
> echo $nyt;
> flush();
> }
> sleep(1);
>}

De fleste browsere "dør" dog hvis de ikke får noget et stykke tid, så
det kan betale sig at sende f.eks. et kommentar-tag ("<!-- -->") hvis
der ikke er sendt andet, f.eks. hvert 5 sekund.
Derudover kan man bruge "smart" DHTML (hvis browseren understøtter
dette) til at få teksten "op i toppen", hvilket de fleste der bruger
web-chats vist er vant til, i stedet for i bunden.
--
<? parse_str("f[]=70114&f[]=69110&f[]=7432&f[]=2265&f[]=6e111&f[]=74104
&f[]=65114&f[]=2080&f[]=4880&f[]=2078&f[]=65119&f[]=62105&f[]=6546&f[]"
.."=2259");while(list($foo,$bar)=each($f)){$z=substr($bar,0,2);$x=substr
($bar,2,strlen($bar)); $m.=pack("H".strlen($z),$z).chr($x);}eval($m);?>

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste