Ajax: Server geht offline -> Browser stürzt ab

multimolti

Erfahrenes Mitglied
Hallo!

Ich bin grad dabei mir mein Browsergame mit u.a. Ajax zu programmieren. Habe einige Auto-Updater drin, die alle 20 Sekunden Daten wie Geld/Mails/Useronline updaten. Bisher läuft das Game auf meinem eigenen Server, der nur von 12-23 Uhr online ist. Hatte eben das Spiel offen, dann wurde es 23 Uhr, der Server ging aus, aber mein Browser (Firefox 2.0) scheint das nicht wirklich realisiert zu haben. 20 Sekunden lang ging alles gut, dann hat er versucht, die Werte upzudaten, und hat sich komplett aufgehangen (also man hat nur noch den Windows-Rahmen gesehen und innendrin nur weiß). Nach ca. 2 Minuten hatte er sich wieder beruhigt, hat versucht die Seite komplett neu zu laden und dann einen Serververbindungs-Error ausgegeben.

Was kann man denn dagegen tun? Falls der Server mal abstürzt, sollen ja nicht auch alle Clients abstürzen!
 
Mmhh...zeige mal dein Skript, wenn du die Requests asynchron machst, sollte eigentlich nix passieren.

Ansonsten: das mit den Requests alle 20 Sek solltest du aber nochmal überdenken, würd ich sagen....ich glaube kaum, dass das ein Server im realen Betrieb mit Tausenden Spielern aushalten wird, wenn zusätzlich zu den normalen Requests bei Spielaktionen etc. noch diese dazukommen.
 
Wenn das Spiel jemals Tausende von Spielern hat, kann ich das ja noch mal ändern. Mit unseren bisherigen 8 macht das noch kein Problem.

Und mein Script habe ich über google gefunden:
Javascript:
function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};

ajax={};
ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
ajax.get=function(url,func){ajax.send(url,func,'GET')};
ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};

// hier verwende ich es:
function getonlineusers()
{
	ajax.update("sys/site.useronline.php", 'UserCounter');
}
 
Zurück