Ik zit met een probleem. Ik moet bij het afsluiten van mijn browser of bij het veranderen naar een andere pagina een php pagina uitvoeren. Dit doe ik a.d.h.v. een ajax_do. Nu is het zo dat hij dit soms doet en soms ook niet. Dus soms voert hij het script uit maar 1/5 keren doet hij het niet. Hoe kan ik dit eventueel oplossen?
?
Onbekende gebruiker
01-06-2009 20:03
termination schreef op 01.06.2009 19:26
[quote='Jelmer schreef op 28.05.2009 16:20']Je kan ook de pagina iedere 30 seconden o.i.d. een melding laten doen dat het bestand nog steeds gelockt moet zijn. Bij die requests update je dan een regel in je database met de huidige datum/tijd. Is die datum/tijd meer dan 60 seconden geleden, dan wordt het document op dat moment blijkbaar niet bewerkt, en is het geünlockt.
Is niet handig. Dat creëert enorm veel server load, zeker met meer gebruikers.[/quote]
Dat valt reuze mee, je hoeft ook echt niet gigantisch veel data te versturen, en die server hoeft ook niet gigantisch veel uit te voeren (misschien wel als de gebruiker weg is).
je kan van mij aannemen dat ik heel wat systemen heb zien dichtlopen op redeneringen zoals deze.
Je weet nooit, maar dan ook NOOIT of je iets uitbereid.
ook al is het niet veel data, en hoeft de server niet veel te doen ,het blijft load.
En met 1 gebruiker zal het geen probleem zijn, met 100 misschien ook niet maar met meer zal je het toch gaan merken.
Je hoeft niet altijd uit te breiden, je kan ook verbouwen. Mocht je meer bezoekers trekken, dan wordt het ook tijd voor een eigen server in plaats van shared hosting, en dan kan je na gaan denken over een aparte andere server onder een ander subdomein zodat je voor het pollen heel Apache en PHP omzeilt.
Je kan ook een andere techniek gaan implementeren, maar ik zou geen alternatief weten dat beter werkt voor deze toepassing (bijhouden of iemand nog op je website zit)
beter meteen goed doen dan later moeten verbeteren zeg ik altijd.
Toch blijf ik het vreemd vinden dat onbeforeunload niet werkt.
Als ik het hier probeer met dezelfde code word alles netjes weggeschreven.
misschien iets vaags in de server of client????
Op zich maakt het niet zoveel uit of het tijdens het testen wel of niet werkt, het legt bepaalde verantwoordelijkheid bij het meest onbetrouwbare deel van een internet-applicatie: de client. Je weet niets over je client, hoe kan je hem dan vertrouwen dat hij meldt dat hij z'n venster sluit? Wat als ik mijn browser force-quit? Wat als de stroom uitvalt?
Normaal, omdat HTTP stateless is, is dat geen probleem. Maar de TS wil hier 'state' introduceren, namelijk het locken van een document. Het lijkt mij vrij essentieel dat dat document weer geopend wordt, zo essentieel dat je daarvoor niet afhankelijk van wilt zijn van de client.
Daarom lijkt mij polling in plaats van zo'n event-achtige opbouw een veel veiliger idee. En zolang de website klein blijft, is dat geen probleem. Dat is aan de TS om te beslissen. Hoe groot is de kans dat zijn website zo groot wordt dat hij moet gaan nadenken over load? Ik denk dat maar een heel miniem deel van alle websites die hier met de hulp op PHPhulp worden gemaakt bekend zullen worden.
ik ben het deels met je eens, maar laten we niet verder offtopic gaan.
Als je voor de oplossing met polling gaat doe ht dan alsjblieft maar eens in de zoveel minuten met een cronjob. gewoon een PHP file op de server uitvoeren, scheelt een hoop requests.
?
Onbekende gebruiker
01-06-2009 20:32
Waarvoor door de server? Waarvoor niet door de client? De client kan best wel iets sturen en dat opslaan in een db ofzo.
Als iemand anders dat document dan wilt gebruiken, dan kan de server kijken of de tijd groot genoeg is.
Dat bedoel ik: de client pollt, hij vraagt, of beter gezegd, meldt om de zoveel seconden dat hij er nog is. Je kan het wel combineren met zo'n onunload-event trouwens, dan kan je het pollen wat minder vaak doen, omdat het dan vooral nog dient om de foute clients die niet melden dat ze gaan stoppen niet schadelijk te laten zijn.
Stel dat de client iedere 5 minuten tegen de server zegt dat hij nog bezig is, en ook probeert om bij onunload te melden dat hij klaar is. In het beste geval hoeft de volgende gebruiker die datzelfde bestand wil bewerken zo goed als niet te wachten. In het ergste geval moet hij 5 minuten wachten, totdat de tijd die de eerste client had gereserveerd door te pollen is verlopen.