Live ophalen van gegevens uit mysql-db als er nieuwe data beschikbar is
Ik ben nieuwe hier, maar lees al een tijd mee.
Ik heb een leuke uitdaging gekregen.
Ik moet in een registratie data kunnen opslaan vanaf meerdere locatie's (werkplekken),
en de data die ingevoerd word moet op 1 mainscreen konen te staan. Voor elke data input, een aparte regel.
Dit moet automatisch (live) verschijnen op het mainscreen. Op het moment dat de registratie data afgehandeld is,
word deze afgevinkt en moet deze weer verdwijnen op het mainsceen.
Nu heb ik zitten testen met ajax (live-update) request x aantal seconden. Alleen dan word de server belast.
Is hier ook een ander iets voor? Zelf zie ik de bomen niet meer door het bos.
in het kort verteld/
persoon a => neemt melding aan => registreert (reg1) => verschijnt op mainscreen
persoon b => neemt melding aan => registreert (reg2) => verschijnt op mainscreen
persoon c => neemt melding aan => registreert (reg3)=> verschijnt op mainscreen
mainscreen => alle "openstaande" meldingen
persoon d => kiest reg1 => kleur veranderd op main screen => handelt af, vinkt af => Verdwijnt van mainscreen
persoon b => kiest reg3 => kleur veranderd op main screen => handelt af, vinkt af => Verdwijnt van mainscreen
enz enz...
Wie kan mij helpen door te zeggen wat voor een soort script ik het beste kan gebruiken (json, javascript, jquery o.i.d.)
Of toch bij ajax blijven.
Gewijzigd op 19/02/2015 16:10:10 door Olivier Kambel
Quote:
Alleen dan word de server belast.
De enige manier om te controleren of er nieuwe post is... is een kijkje nemen in de postbus lijkt mij?
Als je begint met de "levensloop van een melding" (? > nieuw > toegekend > compleet > ?) en ervoor zorgt dat de toewijziging een ondeelbare actie is (zodat niet meerdere personen dezelfde registratie kunnen claimen) dan denk ik dat je al een heel eind bent.
De uitwerking van dit ontwerp zal iets met AJAX polling zijn, geschreven in JavaScript. De zaken die je hierboven noemt zitten allemaal in hetzelfde straatje: de AJAX-polling geschiedt bijvoorbeeld via jQuery (wat een vorm van JavaScript is) en de AJAX-responses kunnen van het JSON-formaat zijn...
Er is dus niet zoiets als "of toch bij ajax blijven".
Aangezien het slechts om één mainscreen gaat kun je gerust een script schrijven die iedere 5, 15 of 30 seconden een request doet bij de server. De server moet een zo kort mogelijk antwoord genereren als je wilt dat deze verder zo min mogelijk belast wordt. Je zou bijvoorbeeld in de request de tijd van de vorige request kunnen meegeven. De server hoeft dan enkel maar te bepalen of er sinds de vorige request iets veranderd is. Is dat dat niet zo dan is een simpele JSON {"result":"no-data"} of iets dergelijks al voldoende. Is er wel nieuwe informatie dan kan het request beantwoord worden met alle relevante informatie.
Wil je dit niet dan moet je kijken naar de HTML5 websockets, maar ook dit belast een server enigzins dus ach.. whatever.. Het gaat hier om slechts één client.
http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/
Ik heb er zelf nooit mee gewerkt , maar hier op het bedrijf gebruiken ze het ook (zal sockets oid zijn) en die "duwt" de info naar je browser als dit beschikbaar is. Mischien een betere oplossing dan je client elke x seconden laten vragen of er nog nieuwe data is
Ik heb er voor gekozen om met node te gaan werken.
ook omdat er wellicht in de toekomst meerdere 'mainscreen' zouden kunnen komen.
Alleen loop ik nu tegen het volgende aan.
Hoe kan ik de node xxx.js standaard laten opstarten bij reboot server.
R. Olivier
Het geheel aan een runlevel controller knutselen gaat in ieder geval niet werken.
Gewijzigd op 22/02/2015 14:46:01 door Yoop Overmaat
Dit ligt enigszins aan de OS (linux distributie) waar de server op werkt.
Maar voor de oplossing voor TS zou ik gewoon een php script bouwen dat even in de database kijkt en de mainscreen data opbouwt en verzend. Slimme SQL, de juiste indexen en elke minuut een request (refresh) vanuit de browser. Verder front-end zoals Thomas beschrijft.
Gewijzigd op 22/02/2015 15:25:01 door John D
John D op 22/02/2015 15:20:08:
Maar voor de oplossing voor TS zou ik gewoon een php script bouwen dat even in de database kijkt en de mainscreen data opbouwt en verzend. Slimme SQL, de juiste indexen en elke minuut een request (refresh) vanuit de browser. Verder front-end zoals Thomas beschrijft.
Wat betreft de oplossing ga ik direct met jou mee John. Zolang er geen duizende monitors hangen is er geen vuiltje aan de lucht :-)
Gewijzigd op 22/02/2015 15:28:48 door Frank Nietbelangrijk
Gewijzigd op 22/02/2015 15:55:38 door John D
http://webcooker.net/ajax-polling-requests-php-jquery/ :
> its when the browser sends a request and the server only responds when having new data available.
IMO moet je als web sockets niet beschikbaar is, nog altijd terugvallen op long polling Hierbij antwoordt de server enkel en alleen als er iets nieuw in de database beschikbaar is, zo niet dan blijft de request lopen. (Eventueel kan je er een timeout aankopellen) Zie bv. > its when the browser sends a request and the server only responds when having new data available.