[AJAX/JS] - Webapp. met instabiele client-server verbinding

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Voor een overkoepelend project op diverse (fysieke) locaties in Indonesië en Nederland heb ik een webapplicatie gemaakt die het mogelijk maakt om gegevens in te voeren, terug te zoeken, aan te passen, etc. Het geheel is gebaseerd op AJAX aan de cliëntside en PHP aan de serverside.

Applicatie werkt perfect, mits er een stabiele verbinding is tussen client en server. Helaas is er in Indonesië echter geen garantie dat de internetverbinding stabiel is. Daarom ben ik nu aan het onderzoeken of er op één of andere manier een mogelijkheid is om de applicatie (beperkt) beschikbaar te houden als de verbinding tijdelijk wegvalt. Het gaat dan voornamelijk om het invoeren van nieuwe gegevens of het wijzigen van bestaande gegevens. Wanneer je op "opslaan" drukt en er is geen internetverbinding, dan zou de applicatie de gegevens vast moeten houden en op een later tijdstip - wanneer de internetverbinding terug is - opnieuw moeten proberen te versturen.

1. JavaScript wachtrij
Aangezien de formulieren via AJAX verstuurd worden, zou het mogelijk moeten zijn om - wanneer de verbinding is weggevallen, de request met gegevens in een wachtrij te plaatsen. De gebruiker zou dan duidelijk feedback moeten krijgen over het feit dat de gegevens op dit moment niet verstuurd konden worden, maar dat dat later nogmaals zal worden geprobeerd. Vanaf dat moment moet iedere X seconden opnieuw geprobeerd worden om de requests in de wachtrij te versturen. Wanneer de gebruiker zijn browser dichtklikt terwijl er nog requests in de wachtrij staan, moet hij heel duidelijk een popup krijgen met de vraag of hij zeker weet dat de browser afgesloten moet worden.

Voordelen: Het werkt op iedere browser zonder aanvullingen en is relatief eenvoudig te implementeren.
Nadelen: De oplossing is bijzonder afhankelijk van allerlei factoren en er zijn legio situaties te bedenken waarin de oplossing niet werkt (gebruiker drukt op verversen: wachtrij weg, gebruiker sluit toch zijn browser af: wachtrij weg, etc.)

2. Mozilla Prims
Ik lees ergens in een blog van Mozilla Labs dat er gewerkt wordt aan de mogelijkheid om met Prism gegevens op de computer zelf op te slaan. Iemand enig idee of dat al mogelijk is en hoe dat zou moeten werken? Ik ga hier zelf ook nog 'ns wat in spitten.

3. Firefox plugin
Met het maken van Firefox plugins heb ik geen enkele ervaring. Maar aangezien de omgeving waarin de applicatie gebruikt wordt perfect te sturen is, zou het mogelijk zijn om alle gebruikers te verplichten om Firefox te downloaden, inclusief een mogelijke plugin. De vraag is of het mogelijk is om een plugin te schrijven die ervoor zorgt dat gegevens tijdelijk offline gecached worden zolang er geen internetverbinding is.


Hierboven de mogelijkheden die ik zo zelf kan verzinnen. Ik hoop dat ik hiermee een discussie op gang kan brengen en dat er wellicht al brainstormend een oplossing gevonden kan worden. Met een beetje geluk is die oplossing ook voor andere tweakers bruikbaar/interessant.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar Google gears ;) (Meer (o.a.) hier)

[ Voor 71% gewijzigd door RobIII op 05-06-2008 11:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Waarom niet gebruik maken van een 'proxy' (relay) service welke tussen de browser en de server in Indonesië komt. De proxy service ontvangt het Ajax request en stuurt deze door als er een verbinding is met Indonesië of houd deze vast totdat de verbinding is herstart.

Wat ik mis in jouw verhaal is hoe je omgaat met de Ajax response welke van de server in Indonesië terug komt. De gegevens welke in de wachtrij staan hoeven niet de gegevens te zijn welke op dat moment worden getoont. Deze issue wordt wel wat groter als je gebruik maakt van een proxy server. Want wat doe je met een response als deze pas 20 uur later doorgestuurd kan worden? Deze vraag zul je moeten beantwoorden voordat je gaat zoeken naar een oplossing.

Browser specifieke oplossingen lijken mij niet handig. Prism is meer een desktop applicatie welke HTML gebruikt als presentatie laag. Hoewel Prism draait in een (mozilla) browser, mis je verder alles van de browser (geen toolbars, menu's, adresbalk, etc). Met oplossingen zoals Prism en plugins krijg je ook weer deployment issues. Hoe ga je zorgen dat iedereen de laatste versie gebruikt?

If it isn't broken, fix it until it is..


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Kijk eens naar Google gears ;) (Meer (o.a.) hier)
Ziet er veelbelovend uit. Ben nu aan het lezen.

Dank voor de tip!

[ Voor 33% gewijzigd door gvanh op 05-06-2008 11:36 ]


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Waarom niet gebruik maken van een 'proxy' (relay) service welke tussen de browser en de server in Indonesië komt. De proxy service ontvangt het Ajax request en stuurt deze door als er een verbinding is met Indonesië of houd deze vast totdat de verbinding is herstart.
Met mijn beperkte kennis van netwerken en proxy interpreteer ik bovenstaande als volgt:
Voor het draaien van een proxy-service moet er een aanvullende server worden opgezet op ieder van de locaties waar de applicatie gebruikt wordt. Deze proxy-server (kan dat ook software op de client-computer van de gebruiker zijn?) ontvangt dan de requests en verwerkt ze op het moment dat er een internet-verbinding is. Maar wat gebeurt er vervolgens met de response die de client verwacht van de server? De proxy kan geen response geven en dus moet de applicatie onbeperkt wachten op een response op zijn actie. Of zie ik dat verkeerd?

Hoe requests vervolgens verwerkt worden op de server wanneer ze met vertraging binnenkomen is inderdaad een ander verhaal. Ik denk alleen dat ik dat probleem wel kan tackelen. Wanneer je iedere request een datum/tijd meegeeft van het moment van versturen kun je aan de kant van de server beslissingen maken over wat je met de gegevens doet. Dat zal afhangen van het tijdstip van de laatste wijziging van het record in de database. Op dit moment - hoe belangrijk deze vraag ook is voor de consistentie van de data - vind ik dat een kwestie die op een later moment bekeken kan worden. Het is in eerste instantie voor mij nu belangrijker om te bekijken of het mogelijk is om in offline mode toch iets te kunnen blijven invoeren. En dus ook (gefingeerd) AJAX responses te kunnen krijgen.

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Google gears is inderdaad volgens mij the way to go als je dingen lokaal op wilt slaan. en controle hebt over wat je clients gebruiken om te browsen. Je kunt ook eventueel nog kijken of je je hele app om kan slingen naar een AIR app.

Verder zijn eruiteraard allerlei trucjes te bedenken om failende connecties af te vangen en queues aan te maken etc, maar volgens mij heb jij iets robuusters nodig :P


Met een proxy schiet je IMO nog niets op aangezien je geen gegarandeerde internet verbinding hebt. dan heb je ook niets aan die proxy toch? :P

[ Voor 17% gewijzigd door SchizoDuckie op 05-06-2008 11:52 ]

Stop uploading passwords to Github!

Pagina: 1