05. maj 2003 - 07:39Der 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.
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
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.
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.
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); }
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; } }
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.
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
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.
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.
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 }
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; } }
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.