Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

dynamische content op website refreshen voor alle clients

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goede avond!!

Ik heb het verzoek gekregen om op een website bepaalde dynamische data gelijktijdig te refreshen voor alle bezoekers. Zie het als de reclame op televisie.

Ik heb al zitten googlen op server side push / ajax en comet. Ik ben er echter nog niet helemaal achter wat nu de handigste manier is om dit in mijn web app te hangen (die verder in Zend is opgebouwd).

Of hoef ik niet met server side push te werken? Hoe werkt bijv. vakantieveiling waarbij iedere bezoeker dezelfde timer ziet lopen en de veilling op hetzelfde moment eindigt.

Heeft iemand hier al wat ervaring mee? Een duwtje in de goede richting zou fijn zijn.

Thanks

[ Voor 15% gewijzigd door Verwijderd op 02-06-2013 22:36 ]


  • painkill
  • Registratie: December 2007
  • Laatst online: 20-11 12:01

painkill

Pain(k)(ill)

Zorg er in ieder geval voor dat die data dan al aan de kant van de user is. Tegelijk alle users data sturen daar wordt geen enkele server vrolijk van :P

Verder heb ik er geen ervaring mee.

Mijn SNES verzameling!


  • SinergyX
  • Registratie: November 2001
  • Laatst online: 21:52

SinergyX

____(>^^(>0o)>____

Javascript timer maken icm met servertime?

Maar gewoon webpagina's of iets als een videostream?

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


  • Matszs
  • Registratie: Juli 2010
  • Laatst online: 20:52

Matszs

><>

Je kan bij vakantieveilingen zien dat ze enorm veel ajax request sturen welke de data op halen, met javascript dus

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 01-11 21:54
Geen ervaringen, maar twee opties: pullen op een vast interval naar je server met de vraag: is er nieuwe informatie, zo ja -> content opvragen (of direct meekrijgen) en daarna je site updaten (AJAX).
Andere optie is misschien html5 websockets. Dat zou moeten voorkomen dat je clients continue op nieuwe content vragen en dat jij aan de serverkant die content kan pushen.

Zoals painkill al aangeeft zitten er een paar haken en ogen aan:
• Zorg dat die content gecached wordt, anders heb je een hoop loze lange responses wat niet handig is voor de client alswel de server (indien je responses hetzelfde zijn voor een groot aantal users).
• @painkill, afhankelijk van de hoeveelheid users en data kan het wel of niet een probleem zijn. Misschien maakt het ook niet uit als user #54 de dynamische content 3 seconden later ontvangt dan user #12.

Specifiek voor
Hoe werkt bijv. vakantieveiling waarbij iedere bezoeker dezelfde timer ziet lopen en de veilling op hetzelfde moment eindigt.
Het gemakkelijkste is hoogstwaarschijnlijk een javascript counter. Bij een pageload bereken je dan bijvoorbeeld alleen het aantal seconden nog te gaan op de timer en vervolgens laat je de timer aflopen met javascript. Afwijkingen kunnen voorkomen doordat de ene alle javascript sneller heeft geparsed dan de andere (en ze gebruiken wel hetzelfde aantal voor de seconden nog te gaan).
Een seconde afwijking maakt voor zo'n timer echter weinig uit. Bijvoorbeeld: als je op de timer kunt klikken duurt de request die volgt waarschijnlijk al +/- 1 seconde waardoor de timer sowieso verlopen is aan de serverkant (mocht je klikken bij 00:00:01). Of: als de timer in minuten wordt getoond is een paar seconden afwijken sowieso lastig te detecteren aan bij de client.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Definieer gelijktijdig eens?
1 : Is dat bijna gelijktijdig (zeg 10 seconden)?
2 : Simpel gelijktijdig (1 seconde)?
3 : Of echt gelijktijdig (ms range) en in hoeverre mogen mensen "cheaten"

1 is namelijk simpel, gewoon ajax-calls / comet server neerknallen.
2 vereist iets meer moeite (van te voren stuur je een tijdstip door waarop de clients een call mogen afvuren, dan heb je nog client-tijden en delays etc die voor verschillen zorgen)
3 cache de hele data van te voren (kan ook met optie 2) en toon het dan op tijdstip x, let er wel op dat doordat de data al bij de client is dat deze dus al uit te lezen is.

Let er bij optie 3 wel op dat dingen cachen en dan mooie dingen met JS op oudere pc's weer traag loopt en dus ook weer tijdsverschil kan maken als je uitgebreide JS gaat doen...

Oftewel het is een afweging... Bedenk wel dat optie 1 (in simpele vorm van continue requests) al een grote aanslag op server capaciteit is (en je dus server-side caching toepast). Ik bedoel 1000 clients veroorzaken met 1 req per 10 secondes al 6000 requests op je server...

En bedenk ook heel erg goed wat je echt nodig hebt. Bij de meeste veilingsites bijv is er enkel maar via json een prijs en een id oid nodig. Als je de prijs hebt dan kan je altijd nog de plaatjes ophalen etc en het commentaar etc.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar SignalR. Dat handelt alle vervelende zaken met cross-browser geneuzel (en ook redelijke ondersteuning voor wat oudere browsers) aardig transparant voor je af en geeft je dus (near) realtime push.

[ Voor 92% gewijzigd door RobIII op 02-06-2013 23:16 ]

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


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 21-11 10:33
Websockets icm bijvoorbeeld Node.js kun je hiervoor gebruiken.
Alle clients houden dan een open-verbinding met je server, waarover je updates kunt pushen.

Verwijderd

Ik heb dit zelf eens opgelost door middel van long-polling, vooral omdat websockets toen nog in bijna geen van de grote browsers ondersteund werd.

Door longpolling verminder je het aantal requests wel ten opzichte van standaard polling maar heeft als nadeel dat je de connectie naar de webserver wel langer open laat staan.

Mbt tot vakantieveilingen, de timers die je ziet zijn wel clientside voor zover ik weet, zelf zou ik dit oplossen door uit te gaan van een eindtijd en niet van een resterende tijd die per seconde verminderd wordt.
Verder gebruiken zij wel een longpolling systeem om de biedingen op te halen en te verversen.

[ Voor 32% gewijzigd door Verwijderd op 03-06-2013 08:17 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 03 juni 2013 @ 08:12:
zelf zou ik dit oplossen door uit te gaan van een eindtijd
Ik niet; God-knows op welke datum al die PC's ingesteld staan maar zelden tot nooit staan ze correct ;) (/tikkie_overdreven_mode ja :P )

[ Voor 10% gewijzigd door RobIII op 03-06-2013 08:56 ]

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


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
RobIII schreef op zondag 02 juni 2013 @ 23:12:
Kijk eens naar SignalR. Dat handelt alle vervelende zaken met cross-browser geneuzel (en ook redelijke ondersteuning voor wat oudere browsers) aardig transparant voor je af en geeft je dus (near) realtime push.
Heb dit recent nog toegepast bij een realtime spel website, werkt zeer betrouwbaar en is vrij eenvoudig te gebruiken!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op maandag 03 juni 2013 @ 08:12:
Mbt tot vakantieveilingen, de timers die je ziet zijn wel clientside voor zover ik weet, zelf zou ik dit oplossen door uit te gaan van een eindtijd en niet van een resterende tijd die per seconde verminderd wordt.
Meestal is het client-side met periodiek (bijv 1x per minuut oid) een poll naar de server voor correcties.

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 21-11 15:31

TheNephilim

Wtfuzzle

Nog een alternatief in eigen beheer: http://www.ape-project.org/ Relatief simpel, maar lust wel wat geheugen.

Een andere mogelijkheid is http://pusher.com/ Deze service kun je gewoon gebruiken en bestaat al. Het enige dat je doet is de servers van Pusher gebruiken en natuurlijk de API's. Ongelofelijk simpel in gebruik, maar je moet wel betalen. Heel erg duur is het geloof ik niet.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 03 juni 2013 @ 08:12:
Ik heb dit zelf eens opgelost door middel van long-polling, vooral omdat websockets toen nog in bijna geen van de grote browsers ondersteund werd.
SignalR doet overigens aan een hele zutload aan fallbacks voor max. compatibility.
  1. WebSockets
  2. Server Sent Events, aka EventSource
  3. Forever Frame
  4. Ajax long polling
Dat had ik in m'n vorige post nog even willen vermelden maar was wat veel vingerwerk op een iPhone :P

[ Voor 17% gewijzigd door RobIII op 03-06-2013 11:54 ]

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


Verwijderd

frickY schreef op zondag 02 juni 2013 @ 23:44:
Websockets icm bijvoorbeeld Node.js kun je hiervoor gebruiken.
Alle clients houden dan een open-verbinding met je server, waarover je updates kunt pushen.
dit was ook m'n eerste gedacht.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 22:08

Pizzalucht

Snotneus.

RobIII schreef op maandag 03 juni 2013 @ 11:54:
[...]

SignalR doet overigens aan een hele zutload aan fallbacks voor max. compatibility.
  1. WebSockets
  2. Server Sent Events, aka EventSource
  3. Forever Frame
  4. Ajax long polling
Dat had ik in m'n vorige post nog even willen vermelden maar was wat veel vingerwerk op een iPhone :P
Klinkt een beetje als de socket.io voor .NET, nice! :*)

Verwijderd

RobIII schreef op maandag 03 juni 2013 @ 08:55:
[...]

Ik niet; God-knows op welke datum al die PC's ingesteld staan maar zelden tot nooit staan ze correct ;) (/tikkie_overdreven_mode ja :P )
Het verschil in datum neem je natuurlijk mee in je berekening, was meer dat je niet uitgaat van het correct lopen van een timer event in de browser, natuurlijk neem je ook zoals al gezegd was een geupdate timestamp mee bij een long-poll ... leek me overbodig te vermelden ;)

Verwijderd

Topicstarter
Thanks voor alle input!!!
SignalR klinkt als een interessante optie die ik verder ga onderzoeken. Ik heb hier nog weinig ervaring mee maar ik vermoed dat ik daar wel uit ga komen.

Misschien nog handig om toe te voegen dat het gaat om een vooraf bepaalde wachtrij (bijv. 200 afbeeldingen) waar de applicatie volgordelijk doorheen loop maar waarvan iedere bezoeker op dezelfde positie in de wachtrij terecht moeten komen en op hetzelfde moment dezelfde nieuwe afbeelding moet tonen. Deze wachtrij kan ik ook als een xml wegschrijven waardoor ik i.i.g. het aantal dbase-calls kan reduceren tot een minimum.

  • Kajel
  • Registratie: Oktober 2004
  • Laatst online: 09-11 18:41

Kajel

Development in Style

Pizzalucht schreef op dinsdag 04 juni 2013 @ 09:02:
[...]


Klinkt een beetje als de socket.io voor .NET, nice! :*)
Voor Socket.io bestaan ook implementaties voor diverse server-side talen. Oorspronkelijk is het ontwikkeld voor Node.js, maar er bestaat bv. een prima Python variant van i.c.m. gevent. Client-side gebruikt het allemaal de standaard Socket.io js library.
Socket.io heeft net als SignalR heel veel fallbacks zodat het op praktisch elke browser werkt.

  • phex
  • Registratie: Oktober 2002
  • Laatst online: 15-11 16:07
http://meteor.com/

Heb er nog geen grote sites meegebouwd maar heeft zeker potentie
Pagina: 1