Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 14:52 Der er 18 kommentarer

Lave en chat stabil..

Når man laver en chat hvad gør man så for den ikke lagger osv?

hvis nu den skal holde til 100 brugere online??
skal man så hente med fx. besked, navn fremfor " * " i en mysql_query?

er der ikke mere??
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 15:00 #1
og hvilken måde er bedst at hente fx figurene fra?? altså hente brugerene??
er det at lave en funktion som hedder indsæt_brugere også laver i opdatere-siden:
indsæt_brugere("navn","noget","noget");

??

eller findes der en sjovere måde?
Avatar billede olebole Juniormester
14. september 2005 - 15:02 #2
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 15:41 #3
Flere svar?
Avatar billede olebole Juniormester
14. september 2005 - 15:53 #4
Naturligvis bruger man ikke *. Det gør man i forvejen kun i MySQL-eksempler - (næsten) aldrig i rigtig kode. Det bør også være en selvfølgelighed, at tabellerne er indekseret i forhold til de kald, der forekommer.

Dernæst er det et absolut must, at du ikke skriver HTML ud på serveren. Der skal _kun_ udveksles rå data - og _kun_ udveksles nødvendige data. Kun data, brugeren ikke har set før, bør sendes til ham. Hvis en position ikke har ændret sig, skal der ikke sendes data om den, osv.

Sørg iøvrigt for at holde dig til realistiske opdaterings intervaller -> ikke under 10 sekunder.
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 15:55 #5
Nu ligger den på 3 sekunder pr. opdatering.
og opdatere i stil med:
<script>
ting:
parent.funktion("..","..","..");
parent.funktion("..","..","..");

brugere:
parent.funktion("..","..","..");
parent.funktion("..","..","..");

</script>

det er ikke meget vel?
Avatar billede olebole Juniormester
14. september 2005 - 16:12 #6
Hvert 3. sekund giver 1.200 HTTP-kald pr. bruger pr. time. Det er der mange webmasters, der ville være glade for pr. måned!  :)
100 simultane brugere giver 120.000 HTTP-kald pr. time - det er langt fra realistisk.

Desuden er det for meget, hvis brugeren allerede har modtaget de pågældende data om 'ting' og 'brugere'. Forhold, der ikke er ændret siden sidste data-hentning, må der ikke sendes data om.
Avatar billede olebole Juniormester
14. september 2005 - 16:17 #7
- du kan også spare en messe bytes ved at skrive ét funktions kald om brugere og ét om ting - og så sende data som arrays, du loop'er igennem i funktionen:
  parent.funk(["", "", ""], ["", "", ""], ["", "", ""]);

- white-space mellem elementerne er kun medtaget for overskuelighedens skyld. Hvert eneste, lillebitte tegn tæller  ;o)
Avatar billede olebole Juniormester
14. september 2005 - 16:22 #8
- eller begge dele i ét funktions kald:
  parent.funk( {"t":[["", "", ""], ["", "", ""], ["", "", ""]], "b":[["", "", ""], ["", "", ""], ["", "", ""]]} );

Her sender du et objekt med to properties: 't' for 'ting' - og 'b' for 'brugere'. Hver property indeholder et array af data-arrays
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 16:22 #9
hvad mener du
hvis jeg har funktionen "funktion"
<script>
function funktion(noget,andet,og,noget,tredje) {
document.getElementById('..').innerHTML = "..";
}
</script>

hvorfor skal jeg så bruge
parent.funktion(["noget", "andet", "og"], ["noget", "tredje"]);
Avatar billede olebole Juniormester
14. september 2005 - 16:24 #10
Hvis du sender data på en anden måde, skal din funktion naturligvis tilpasses de argumenter, den modtager  ;o)

Formålet er at få skåret ned på det antal bytes, der hentes ved hver HTTP-request
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 16:24 #11
jamen.. forstår ikke rigtigt.
hvorfor snakker du om arrayz nu?
Avatar billede olebole Juniormester
14. september 2005 - 16:26 #12
Fordi, det skærer voldsomt ned på det antal tegn, du behøver at skrive -> downloade  ;o)
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 16:26 #13
her er min funktion:

function insetuser(brugerid,brugernavn,felt,left_px,top_px,tilbehor,haar,clothes,humor, sex, rum) {
if(rum == "<?php echo "$row[rum]"; ?>"){
z = felt+200;
var userk = brugernavn;
var x = left_px;
var y = top_px;
      document.getElementById('inset_chat').innerHTML = document.getElementById('inset_chat').innerHTML+'indsætter til diven her.';
} else {
deleteuser(brugerid);
}
}

hvordan skal sætningen så  se ud??!!!
Avatar billede olebole Juniormester
14. september 2005 - 16:31 #14
Det kommer anpå, hvilken måde, du mener - men princippet er bare, at du lægger alle dine bruger informationer ind i arrays og sender disse arrays til funktionen.
Her bladrer du bare dine arrays igennem og for hver bruger, gør du det samme, som du gør i din funktion nu
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 16:32 #15
oki.. findes der en nemmere måde så???
hkan jeg ik hente olebole chatten også kigge efter der?
Avatar billede olebole Juniormester
14. september 2005 - 16:42 #16
Jamen, det handler ikke om, hvad du synes er nemt - men hvad der er bedst. Synes du, det her er svært, har du langt igen  :)

Den ligger ikke online mere.
Avatar billede 1nz4n3 Nybegynder
14. september 2005 - 16:51 #17
oki.. hvordan laver man så sådan med det der timestamp??
hvis den skal hente noget som er sket indefor de sidste 10 minutter??
Avatar billede olebole Juniormester
14. september 2005 - 16:52 #18
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