In mijn script maak ik aardig wat ajax-calls. Wat ik eigenlijk aan het doen ben is pollen of de server al iets nieuws heeft van andere users*. Nu wil ik voorkomen dat de server overbelast raakt. Met andere woorden: als het niet druk is op de server, mag iedere client bijv. 1 ajax call per seconde doen, maar als het wel druk is, max 1 ajax call per minuut.
Nu vraag ik me af hoe ik dit het beste aan kan pakken. Momenteel zie ik twee opties:
1. De server geeft met iedere call een getalletje terug: serverScriptExecutionTime. Het object wat de calls afhandelt stopt serverExecutionTime in een formule om het volgende tijdstip uit te rekenen.
2. Gelijk aan 1, echter nu meet ik op de client voor de Ajax-call en op het moment dat de call terugkomt (met new Date().getTime(); Deze twee van elkaar afgetrokken geeft serverExecutionTime.
Vervolgens stop ik serverExecutionTime in de volgende formule:
Wat vinden jullie hiervan?
* Ik ben op de hoogte van Wikipedia: Comet (programming) technieken, maar ik ben nu gelimiteerd tot een standaard LAMP-configuratie (zonder Tomcat). Ik zal het dus met PHP moeten zien te rooien. Zie ook http://stackoverflow.com/...3201/using-comet-with-php. In mijn project wil ik een 'proof of principle' leveren, waarbij ik wel nodig heb dat verschillende gebruikers elkaars gegevens in (zo veel mogelijk) realtime binnenkrijgen. Als het blijkt te werken met weinig gebruikers (max 30), wil ik eea echt schaalbaar maken met Comet oid.
Nu vraag ik me af hoe ik dit het beste aan kan pakken. Momenteel zie ik twee opties:
1. De server geeft met iedere call een getalletje terug: serverScriptExecutionTime. Het object wat de calls afhandelt stopt serverExecutionTime in een formule om het volgende tijdstip uit te rekenen.
2. Gelijk aan 1, echter nu meet ik op de client voor de Ajax-call en op het moment dat de call terugkomt (met new Date().getTime(); Deze twee van elkaar afgetrokken geeft serverExecutionTime.
Vervolgens stop ik serverExecutionTime in de volgende formule:
JavaScript:
1
2
3
4
5
6
| var max_user_waiting_time = 10; //the maximum amount of seconds for the next call var min_user_waiting_time = 0.500; //the minimum amount of seconds for the next call var max_server_execution_time = 10000; //the maximum server time in ms we accept var min_server_execution_time = 50; //the minimum server time (so time the server side script takes when server has little load) var timeOutInSeconds = min_user_waiting_time+((max_user_waiting_time-min_user_waiting_time)*((serverExecutionTime-min_server_execution_time)/max_server_execution_time)); |
Wat vinden jullie hiervan?
* Ik ben op de hoogte van Wikipedia: Comet (programming) technieken, maar ik ben nu gelimiteerd tot een standaard LAMP-configuratie (zonder Tomcat). Ik zal het dus met PHP moeten zien te rooien. Zie ook http://stackoverflow.com/...3201/using-comet-with-php. In mijn project wil ik een 'proof of principle' leveren, waarbij ik wel nodig heb dat verschillende gebruikers elkaars gegevens in (zo veel mogelijk) realtime binnenkrijgen. Als het blijkt te werken met weinig gebruikers (max 30), wil ik eea echt schaalbaar maken met Comet oid.