Live ophalen van gegevens uit mysql-db als er nieuwe data beschikbar is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Olivier Kambel

Olivier Kambel

19/02/2015 16:08:29
Quote Anchor link
Hoi allemaal,
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
 
PHP hulp

PHP hulp

18/12/2024 18:09:37
 
Thomas van den Heuvel

Thomas van den Heuvel

19/02/2015 16:30:47
Quote Anchor link
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".
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/02/2015 16:35:21
Quote Anchor link
Ik neem aan dat dit alles werkt via één centrale (web)server en dat het mainscreen gewoon een browser is?

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.
 
Jacco Engel

Jacco Engel

19/02/2015 17:21:17
Quote Anchor link
Als je echt heel fancy wil gaan kun je nog altijd kijken naar :
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
 
Olivier Kambel

Olivier Kambel

22/02/2015 13:45:32
Quote Anchor link
Bedankt voor jullie antwoorden.

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
 
Yoop Overmaat

Yoop Overmaat

22/02/2015 14:45:33
Quote Anchor link
Met een window.onload function() in desbetreffende pagina?
Het geheel aan een runlevel controller knutselen gaat in ieder geval niet werken.
Gewijzigd op 22/02/2015 14:46:01 door Yoop Overmaat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/02/2015 14:54:30
Quote Anchor link
Dit ligt enigszins aan de OS (linux distributie) waar de server op werkt.
 
John D

John D

22/02/2015 15:20:08
Quote Anchor link
Ik vind node.js zeer matig. Ik heb pilot gebouwd (Linux) voor backuppen naar de cloud (azure) middels node.js en het liep regelmatig in een onverklaarbare error. node.js start ook traag op, ik werkte met een cron script. Node.js start toch een soort van java virtual machine, dus traag. Ik werk nu met python script in de cron en is razendsnel. TS kan ook een dedicated python http servertje opzetten.

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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/02/2015 15:26:40
Quote Anchor link
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
 
John D

John D

22/02/2015 15:53:21
Quote Anchor link
De individuele afhandelaars kunnen met hetzelfde scherm werken maar eventueel dan zonder autorefresh. Gewoon scherm scherm oproepen en een regel kiezen en afhandelen. Klaar is terugkeren naar hoofdscherm. Veel hergebruik van code dus. Daar zijn dan bijvoorbeeld selecties te maken: alle, alleen de eigen calls of de calls van pietje of de urgent open calls om maar wat te noemen. Niet echt moeilijk allemaal.
Gewijzigd op 22/02/2015 15:55:38 door John D
 
LEDfan nvt

LEDfan nvt

22/02/2015 17:38:54
Quote Anchor link
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. 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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.