Asta - riavvio countdown ogni 30 secondi

martedì 14 giugno 2011 - 23.12
Tag Elenco Tags  C#  |  .NET 3.5  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008 R2  |  Javascript

superfrankie Profilo | Newbie

Salve a tutti,
sto diventando pazzo per fare una gestione aste online tipo il sito www.bigdeal.com, ovvero con un timer che si riavvia ogni 30 secondi se qualcuno ha fatto un offerta, altrimenti termina l'asta. Con un timer lato server non ho una consecutività del contatore corretta (fa magari 17..15..14.11) mentre con un timer lato client tipo jquery countdown non so come sincronizzare i client non tanto perchè abbiano lo stesso valore di contatore ma quanto perchè se un utente fa un'offerta all'ultimo secondo mi capita che il contatore di questo riparte da 30, mentre gli altri client sono già scaduti non avendo fatto in tempo a ricevere l'aggiornamento (che faccio tramite valorizzazione di un campo hidden con il valore ultimo di offerta tramite un timer lato server). Avete idea di come fare questa cosa? Non so più cosa tentare.

Grazie a chi avrà la bontà di rispondermi.

Gluck74 Profilo | Guru

la cosa non è semplice.
Non sto ora a riempirti di codice, ma ti do qualche dritta.

Secondo me devi memorizzare l'istante dell'offerta in un formato time sul DB, e poi inserirlo in cache per gli accessi sicuramente alti al dato.
In questo modo sia il codice server che il client posso sapere con precisione al secondo e frazioni, quanto tempo rimane.

Per sincronizzare poi il client con il server, puoi utilizzare delle chiamate AJAX che appunto vanno a leggere ad esempio ogni 5 secondi il valore memorizzato nella cache e possono sincronizzare i countdown.
Cerca in rete come effettuare le chaimate AJAX, ma ancora meglio cerca documentazione sulla tecnologia COMET, che sarebbe una tecnologia che permette di aggiornare il client da parte del server.

Spero di averti dato un buono spunto

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

superfrankie Profilo | Newbie

Ciao,
grazie per le dritte, quindi la strada è giusta, devo solo ottimizzare la cosa. Le chiamate ajax le faccio con PageMethods per impostare la fine asta, provo ad applicare lo stesso sistema al valore corrente dell'asta. Cercherò info sulla tecnologia COMET.

Intanto grazie mille.

Gluck74 Profilo | Guru

non posso assicurarti che sia l'unica strade e che sia la migliore.........

Io penso che l'importante sia fissare un "dato" che tutti i client debbano leggere, ovvero l'istante dell'ultima offerta.
Dopo di che i client interrogano in continuazione questo dato per capire se aggiornare il countdown. Importante per questo motivo è non interrogare su database, ma il "dato" dovrà essere disponibile o in cache o in session.

Invece usando COMET (che comunque ha una logica simile) ci sarà un evento, una funzione, che (permettimi questa affermazione non proprio precisa) invierà il nuovo dato e farà scattare la funzione di aggiornamento, nel momento in cui viene fatta un'offerta.

Non è semplice ma usando attenzione è fattibile.
Ciao buon lavoro

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5