Opzet webapplicatie met continue verbinding clients

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • zerok
  • Registratie: November 2001
  • Laatst online: 11-10 23:28
Ik heb al een tijdje als hobby project een internet wekker radio.

Afbeeldingslocatie: https://timearc.nl/timearc.jpg

Dit is een custom stukje elektronica met als functie: tijd weergave, 5 touch knoppen en een acceleratie meter voor de stand. Dit alles communiceert met een raspberry pi met een python script.

Op dit moment werkt het system door een afspraak met een bepaalde naam uit mijn google calendar te halen. Dit wordt iedere 5 minuten gecheckt. Op het moment van de afspraak wordt er dan een play list gestart en zou ik wakker moeten worden ;)

Wat ik nu jammer vind aan het systeem is dat er geen feedback is of het gelukt is om de wekker te zetten. Dit weet ik pas na maximaal 5 minuten. Ook kan ik nu niet een bepaalde stream aanzetten als ik gewoon radio wil luisteren.

Om dit op te lossen wil is graag een continue verbinding met een server opzetten. Hiervoor wil ik graag wat advies.

Wat de server moet kunnen:
  • Webserver zodat de gebruiker ‘real-time’ settings kan aanpassen (of dat google calendar een push notificatie stuurt)
  • Continue verbinding met de client houden. Dit is de raspberry pi die zich waarschijnlijk achter een firewall/NAT bevind
Waar ik zelf aan zit te denken:
  • Bij een simpele web hosting wat php scripts draaien. De client moet dan alleen continue de web server pollen om te zien of er een update is. Dit klinkt nogal inefficiënt.
  • Zelf een http server draaien (in python). Als er dan een request binnen komt kan dit script de bijbehorende socket vinden en de commando’s doorgeven.
Hoe zouden jullie een webapplicatie met continue verbinding naar clients opzetten? Bij voorkeur: makkelijk te ontwikkelen (python?) en schaalbaar (vooral uit interesse niet echt noodzakelijk).
Is hier al een handig framework voor?

"never argue with idiots they drag you down to their level and beat you with experience" dilbert

Alle reacties


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
NodeJS icm bijv Primus is snel en heeft weinig resources nodig.

PHP zou evt kunnen omdat het hobbymatig is maar dan zou ik Ratchet nemen ipv polling te gebruiken.

Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 10-10 17:57
De server pollen kan op verschillende manieren.
Je hebt:
short pulling de client stuurt dan regelmatig een request naar de server en krijgt dan direct antwoord.
long pulling de client stuurt dan een request naar de server, maar de server stuurt pas een antwoord wanneer dit beschikbaar is. Er wordt dan wel volcontinue een verbinding actief gehouden.

En je hebt websockets waar de client zich aanmeld bij de server en de server dan ook zelf berichten naar de client kan sturen.

Zelf een server draaien (op je Pi?) zou ik proberen te ontwijken. Zeker omdat je ook achter een NAT zit.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
SPee schreef op zondag 27 december 2015 @ 13:59:
Zelf een server draaien (op je Pi?) zou ik proberen te ontwijken. Zeker omdat je ook achter een NAT zit.
Zover ik begrijp staan zowel de pi als de wekker in t zelfde netwerk dus zie geen enkele reden t niet zelf te hosten.

Acties:
  • 0 Henk 'm!

  • zerok
  • Registratie: November 2001
  • Laatst online: 11-10 23:28
Met een server bedoel ik of een shared hosting (lekker goedkoop want dat heb ik al) of zelf ergens een kleine linux server draaien (VPS). Om te ontwikkelen kan ik een 'server' in mijn eigen netwerk draaien. Ik heb dit graag extern zodat het systeem zo betrouwbaar mogelijk is. Het grootste gevaar bij dit soort projecten is dat het een keer stuk gaat en dat ik dan geen tijd/zin heb om het te fixen.

Behalve voor dit specifieke project ben ik ook geintereseerd in wat er in de 'echte' wereld voor techniek gebruikt wordt. Ik ben hier zelf in geintereseerd maar het zou ook goed kunnen dat dit komend jaar op mijn werk actueel wordt. In dat geval gaat het om 30 clients maar dat kunnen er uiteraard meer worden op termijn.

@Cartman! bedankt voor de link naar ratchet. Ik ga hier zeker even naar kijken. Als ik het goed begrijp moet ik voor websockets ergens een server draaien (dat kan niet bij een shared hosting omdat er dan een continue process moet draaien)

@SPee long polling klinkt interessant omdat dit op een shared hosting kan draaien. Als ik het goed begrijp moet het script dan continue een database controleren om te zien of er nieuwe data is om te verzenden.

"never argue with idiots they drag you down to their level and beat you with experience" dilbert


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:00

BCC

Websockets

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 07-10 10:46
Of gewoon ouderwetse sockets. Iets bewerkelijker maar is de basis voor netwerk communicatie.

http://www.binarytides.co...ket-programming-tutorial/

Acties:
  • 0 Henk 'm!

  • BlueZero
  • Registratie: Mei 2007
  • Laatst online: 10-09 15:45
Voor een simpele websocket client in Python kan je deze gebruiker:
https://github.com/liris/websocket-client

Voor een simpele websocket server zou ik zoals hierboven ook gezegd een nodejs server opzetten met socket.io
http://socket.io/

Ik heb socket.io zelf veel gebruikt voor bijvoorbeeld chat functionaliteit of news updates en dit werkt erg prettig.

Acties:
  • 0 Henk 'm!

  • PWSteal
  • Registratie: December 2013
  • Laatst online: 28-09 21:48
Wat ook zou kunnen is SignalR gebruiken. Zag alleen dat voor Python pas versie 0.0.2 uit is. Dus kans dat nog niet echt stabiel is.

Wat je kort gezegd kan doen is als client op bepaalde events in de server subscriben, als dat event plaatsvind wordt het vanaf de server naar de client gepushed. Onderliggende technologie hiervan is afhankelijk van het platform, maar verwacht dat het in dit geval ook websockets is.

Dan is het even uitzoeken of er mogelijk is dat GoogleCalendar api een push naar jouw server kan sturen indien een afspraak bijna begint, of begint.
Pagina: 1