Avatar billede sp Nybegynder
05. maj 2003 - 07:39 Der er 27 kommentarer og
1 løsning

Chat med mindst mulig belastning af serveren

Det mest almindelige er at bruge application-objectet eller en databasen, samt en timer til at opdatere siden med.

Serveren vil blive belastet meget.

Er det muligt med ASP at lave en chat der kun opdateres når nogle sender noget, eller at det kun er teksten der sendes der opdateres, så serveren slipper for at sende en hel html-side f.eks. hvert 10 sekund...?

Problemet med stor belastning af serveren ved i værste fald betyde at udbyderen lukker chatten.
Jeg vil helst undgå at chatten belaster serveren for meget.

mvh
Søren Peter
Avatar billede =maddog= Nybegynder
05. maj 2003 - 07:58 #1
du kan velsagtens bruge et ActiveXObject/Document.implementation objekt client-side og kun spørge om der er nyt. Hvis der er nyt modtage det som en string og nøjes med at sætte det ind med HTMLElement.insertHTML(contextual).
Det kræver selvfølgelig at brugeren har slået safe ActiveX components og scripts til.
Avatar billede sp Nybegynder
05. maj 2003 - 08:01 #2
Vis mig et eksempel.
Avatar billede sp Nybegynder
05. maj 2003 - 08:03 #3
Eller vil du ikke henvise til noget dokumentation
Avatar billede =maddog= Nybegynder
05. maj 2003 - 08:06 #4
et eksempel. ok. det vil lige tage et par sekunder.
eksemplet bliver teoretisk og ikke fuldstændigt, jeg har aldrig sat en chat op og har heller ikke lyst til det.
Avatar billede =maddog= Nybegynder
05. maj 2003 - 08:19 #5
Jeg kigger lige efter noget prima dokumentation. I mellemtiden kan du bruge dette som reference:

<script type="text/javascript">
function getXmlHttpPrefix() {
    if (getXmlHttpPrefix.prefix)
        return getXmlHttpPrefix.prefix;
   
    var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
    var o;
    for (var i = 0; i < prefixes.length; i++) {
        try {
            // try to create the objects
            o = new ActiveXObject(prefixes[i] + ".XmlHttp");
            return getXmlHttpPrefix.prefix = prefixes[i];
        }
        catch (ex) {};
    }
   
    throw new Error("Could not find an installed XML parser");
}


// XmlHttp factory
function XmlHttp() {}

XmlHttp.create = function () {
    try {
        if (window.XMLHttpRequest) {
            var req = new XMLHttpRequest();
           
            // some versions of Moz do not support the readyState property
            // and the onreadystate event so we patch it!
            if (req.readyState == null) {
                req.readyState = 1;
                req.addEventListener("load", function () {
                    req.readyState = 4;
                    if (typeof req.onreadystatechange == "function")
                        req.onreadystatechange();
                }, false);
            }
           
            return req;
        }
        if (window.ActiveXObject) {
            return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
        }
    }
    catch (ex) {}
    // fell through
    throw new Error("Your browser does not support XmlHttp objects");
};

function postForUpdate(URL, xml) {
  var xmlHttp = XmlHttp.create();
  var async = true;
  xmlHttp.open("GET", URL, async);
  xmlHttp.onreadystatechange = function () {
      if (xmlHttp.readyState == 4)
        insert(xmlHttp.responseText); // responseXML : XmlDocument
  }
  xmlHttp.send(xml);
}

function insert(str) {
alert(str);
}
onload = function() {
postForUpdate(self.location,"<request>recieve</request>");
}
</script>


Vi sender en stump xml <request>recieve</request> til serveren (i dette tilfælde til dokumentet selv for simpelhedens skyld) og modtager noget text som følge (i dette tilfælde hele molevitten, da det er en statisk html side som serveren bare sender ud uantastet).
Det skulle jo være soleklart hvordan serveren kan modtage en minimal besked, og hvordan man i funktionen insert(str) kan lave fikserier, såsom:
function insert(str) {
if (parseInt(str)==-1) return; // hvis vi sender "-1" tilbage er der ingen update
else {
document.getElementById("chatbox").innerHTML += str;
}
}
Avatar billede sp Nybegynder
05. maj 2003 - 08:28 #6
Så man bruger "lag", så kun laget bliver opdateret
Avatar billede =maddog= Nybegynder
05. maj 2003 - 08:35 #7
Yes. muligvis bliver du nød til at sende et fuldbyrdet xml dokument. du kan danne et XMLDocument og loade XML ind i det og sende det til serveren.
Avatar billede sp Nybegynder
05. maj 2003 - 08:42 #8
Avatar billede sp Nybegynder
05. maj 2003 - 08:45 #9
Jeg fandt noget ActiveX
<OBJECT
    classid="clsid:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
    id=lblActiveLbl
    width=250
    height=250
    align=left
    hspace=20
    vspace=0
>
<PARAM NAME="Angle" VALUE="90">
<PARAM NAME="Alignment" VALUE="4">
<PARAM NAME="BackStyle" VALUE="0">
<PARAM NAME="Caption" VALUE="A Simple Desultory Label">
<PARAM NAME="FontName" VALUE="Verdana, Arial, Helvetica">
<PARAM NAME="FontSize" VALUE="20">
<PARAM NAME="FontBold" VALUE="1">
<PARAM NAME="FrColor" VALUE="0">
</OBJECT>
Avatar billede =maddog= Nybegynder
05. maj 2003 - 08:49 #10
nogenlunde ja.
Jeg har som sagt aldrig selv brugt det her til andet en xml som passiv database, men ja.
Jeg har jo netop heller aldrig lavet en chat.
Fordelen ved at pakke det ind som XML er at du får en struktur i din request. Du laver jo ikke en "main-stream" form request, så det er vigtigt serveren forstår hvad der bliver spurgt om.
Avatar billede sp Nybegynder
05. maj 2003 - 08:52 #11
Er det hurtigere at læse og skrive med XML?
Avatar billede sp Nybegynder
05. maj 2003 - 08:52 #12
Eller kræver mindre fra serveren
Avatar billede =maddog= Nybegynder
05. maj 2003 - 08:53 #13
det var noget besværligt noget. lav det da hellere med JScript/JavaScript som nævnt ovenfor.
Jeg har lagt en side ud her.
Bare byt location.href ud med din server og leg med det.
http://www.mycgiserver.com/~maddog/temp/Exp348523.html
Avatar billede sp Nybegynder
05. maj 2003 - 09:03 #14
Når jeg går ind på siden kommer der et popupvindue op...??
Avatar billede =maddog= Nybegynder
05. maj 2003 - 09:09 #15
right-click -> save as -> gem på din egen disk -> do your own magic. :D
Avatar billede sp Nybegynder
05. maj 2003 - 09:10 #16
nååh nu er jeg med. Det kommer ud i vinduet
Avatar billede sp Nybegynder
05. maj 2003 - 09:14 #17
Så langt så godt. Nu får jeg sourcen op fra default-siden på mit domæne.
Avatar billede =maddog= Nybegynder
05. maj 2003 - 09:16 #18
godt nok. så er næste skridt at prøve at opfange det du sender afsted med "GET".
Avatar billede sp Nybegynder
05. maj 2003 - 09:23 #19
Det ligner en eller anden advarsels-popup
Avatar billede =maddog= Nybegynder
05. maj 2003 - 09:27 #20
Okey, hvis du ikke kan et minimum af javascript er dette ikke lige løsningen.
Min fejl, beklager. Jeg har altså bare ikke resourcer til at sætte dig ind i det. Den "advarsel" hedder en alert og er hyppigt anvendt til debugging (kanske fordi den ikke er sådan at overse :-D).
Jeg har i det mindste ikke lagt et svar, så der kommer sikkert en venlig sjæl forbi med mere erfaring i chats og ASP end jeg har.
Avatar billede sp Nybegynder
05. maj 2003 - 09:27 #21
Ja men lige hvordan man gør det, ved jeg ikke
Avatar billede sp Nybegynder
05. maj 2003 - 09:31 #22
Jeg kender godt til alerts og også lidt til javascript. Men den her er ikke en almindelig alert. Det ligner lidt en alert, men det er sourcen fra siden jeg vælger, der kommer op.
Avatar billede =maddog= Nybegynder
05. maj 2003 - 09:42 #23
det er helvedes svært at forklare. se i funktionen postForUpdate? der er en linje der hedder
insert(xmlHttp.responseText); // dette her er teksten vi får return
og i insert
function insert(str) {
alert(str); // for lethed vælger vi indtil vidre at "alerte" teksten vi får retur
}
Avatar billede sp Nybegynder
05. maj 2003 - 09:46 #24
aha. Den skifter vi ud med et lag, så er jeg helt med. Men det med at opfange noget kode der bliver sendt med GET ved jeg ikke lige noget om
Avatar billede sp Nybegynder
05. maj 2003 - 09:47 #25
<form action="send.htm" method="get">
<input type="text" value="" size="20">
<input type="submit" value="send">
</form>
Avatar billede sp Nybegynder
05. maj 2003 - 09:51 #26
Jeg får nu vist indholdet i et lag, fra forrige side

function insert(str) {
if (parseInt(str)==-1) return; // hvis vi sender "-1" tilbage er der ingen update
else {
document.getElementById("chatbox").innerHTML += str;
}
}

<table summary="">
<tr>
<td id="chatbox"></td>
</tr>
</table>
Avatar billede =maddog= Nybegynder
05. maj 2003 - 09:51 #27
det virker også en lille smule buggy for mig. beklager endnu engang. læste en lang artikel om hvor skide smart det her var. vor herre bevares.
Avatar billede sp Nybegynder
06. november 2003 - 15:53 #28
Den her kommer vi ikke videre med.
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
Kurser inden for grundlæggende programmering

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