Contador regressivo com Node.js

58 views
Skip to first unread message

Vinicius Tadeu

unread,
Feb 16, 2018, 1:12:05 PM2/16/18
to Node.js Brasil
Boa Tarde Galera, 

To começando a estudar node para fazer um site de leilões online e eu tenho uma duvida cruel kkkk

Gostaria de saber se tem alguma forma do node controlar vários contadores regressivos ao mesmo tempo?

Por exemplo: 3 leilões, um para acabar daqui 10 min, outro para acabar daqui 5 min e o ultimo acaba daqui 30 seg.

Alguém tem alguma ideia de como faço esses contadores de forma paralela como no exemplo?

Um site que faz algo parecido é o Lance de Vantagens.

Encontrei esse tópico aqui no fórum mas não entendi mto bem 

Estou utilizando PHP + Node.Js + Socket IO.

Muito Obrigado a Todos

felipe huggler

unread,
Feb 16, 2018, 1:19:44 PM2/16/18
to nod...@googlegroups.com
Seu eu fosse dar uma sugestão eu faria da seguinte forma.

Cadastraria os leilões, ex: nome do leilão, produto, valor inicial, data e hora início e data e hora término.

Aí no client faria uma consulta puxando os leiloes que eu quero ver, e no próprio cliente vc fica validando, checando se pode mostrar ou não o leilão.

A questão dos lances, aí sim eu faria um esquema de pub/sub pra mostrar em temp o real o valor do lance.



--
Você recebeu essa mensagem porque está inscrito no grupo "Node.js Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Vinicius Tadeu

unread,
Feb 16, 2018, 1:25:24 PM2/16/18
to Node.js Brasil
Mto Obrigado pela ideia, só que até ai eu consegui avançar. Garrei mesmo no contador regressivo. Pois se o leilão não tiver nenhum acesso a ideia é o próprio node finaliza-lo
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+un...@googlegroups.com.

André Caribé

unread,
Feb 16, 2018, 1:32:30 PM2/16/18
to nod...@googlegroups.com
Sim, tem como fazer, mas não me parece ser uma boa centralizar no servidor, pois será mais difícil de escalar, se necessário, e ao fazer deploy poderá haver inconsistências para o usuário. Sugiro não manter esses números 100% no Node. Deixe o navegador do usuário fazer isso é utilize o Node para validar e sincronizar o tempo.

--
Você recebeu essa mensagem porque está inscrito no grupo "Node.js Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
André Caribé
São Paulo, SP

felipe huggler

unread,
Feb 16, 2018, 1:33:12 PM2/16/18
to nod...@googlegroups.com
Bom....tu faz dessa maneira, quando chegar no final do leilão, vc dispara um post, sei lá, pro seu endpoint encerrando o leilão. E desabilita o botão, esconde.

Agora se vc quer tudo pelo node, então vai ter que fazer vários subscribers, inclusive para o contador regressivo, que vc pode enviar uma mensagem ou uma ação na resposta. 


Ex:

action: 'finished', message: 'O leilão acabou

action: 'regressive', message: suadataehoranoformatoquever

Aí no seu cliente você fica checando qual é a ação que está chegando no seu socket





Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+unsubscribe@googlegroups.com.

André Caribé

unread,
Feb 16, 2018, 1:35:07 PM2/16/18
to nod...@googlegroups.com
Você pode encerrar de outras formas, um cronjob seria uma solução simples para chamar o endpoint de encerramento do leilão (complementando a ideia do endpoint)

Eduardo Quagliato

unread,
Feb 16, 2018, 1:40:28 PM2/16/18
to nod...@googlegroups.com
Opa! Tudo bem, Vinicius?

Antes de tudo, acho que você precisar dar uma organizada na sua stack.

Você está utilizando PHP (back-end) e Node.js (back-end) simultaneamente. Acredito que isso deixa sua stack pouco efetiva.

Você pode utilizar PHP no back-end (server-side) e usar JavaScript no front-end (client-side), assim como também pode user Node.js no back-end e JavaScript no front-end.

Utilizando socket, o que você pode fazer é um loop no seu server (PHP ou Node.js) emitindo os timestamps atualizados pro socket aberto. Mas essa parece ser uma péssima opção. Você teria que manter um socket aberto para cada contador regressivo pra cada usuário etc. e isso afetaria fortemente sua escalabilidade.

A solução que eu sugiro ser mais efetiva seria essa:

1. No load da página, fazer um request pro server, buscar o timestamp e o ID do contador
2. Executar o loop/recursão client-side para ir decrescendo o contador

Nesse caso você não pode esquecer de validar no server-side todas as requisições do client pra saber se o leilão continua operante.

Caso você queira, você poderia usar socket para emitir o fim do leilão, assim você notificaria o client que o leilão terminou. Mas não acho que isso seja imprescindível.

Espero ter ajudado.

Abs,

-- eduardo quagliato
http://quagliato.me

--
Você recebeu essa mensagem porque está inscrito no grupo "Node.js Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+unsubscribe@googlegroups.com.

Vinicius Tadeu

unread,
Feb 16, 2018, 1:52:44 PM2/16/18
to Node.js Brasil
Mto Obrigado pelas ideias galera, 

Já deu uma esclarecida. Irei dar uma estudada encima do que vocês sugeriram.

Vinicius Tadeu

unread,
Feb 16, 2018, 2:02:37 PM2/16/18
to Node.js Brasil
Opa, Tranquilo e vc?

A função de dar lances do sistema usará Node.js no back-end e JavaScript no front-end como vc falou. Já outas funcionalidades do sistema já está escrito em PHP.

Só fiquei com uma duvida em sua sugestão,

Caso o contador chegue a zero o próprio cliente iria informar o node que o leilão foi encerrado como o Huggler disse

Mto obrigado =D

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+un...@googlegroups.com.

Eduardo Quagliato

unread,
Feb 16, 2018, 2:51:57 PM2/16/18
to nod...@googlegroups.com
Na verdade não.

Ninguém precisa notificar o back-end que o leilão terminou. O que qualifica um leilão terminado é uma conta: timestamp que termina o leilão - timestamp atual = diff.

Se o diff for menor ou igual à zero, o leilão tá terminado. Essa é uma verificação básica que você deve fazer no back-end quando o client fizer a request.

Pra ser ainda mais produtivo, você pode salvar no DB o timestamp de término do leilão e quando fizer a consulta, filtra ela por ID e por timestamp de fim de leilão <= que timestamp atual. Assim o DB nem retorna o leilão se já tiver terminado e você pode cuspir um 404 pro client.

-- eduardo quagliato
http://quagliato.me

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+unsubscribe@googlegroups.com.

Cleyton Urani

unread,
Feb 23, 2018, 8:36:01 AM2/23/18
to nod...@googlegroups.com
Fala Vinícius,

Em qualquer momento que alguém requisitar os dados dos leilões antes de apresentar a os dados.
Consulta internamente os leilões que estão com situação em aberto e com data final vencida e atualiza os registros para finalizados.

Não compreendi o porquê tem que contar regressivamente para finalizar os leilões, já que no momento que o leilão acabar não está exibindo para ninguém.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
{
   name : Cleyton Urani,
   linkedin: https://goo.gl/AEhbTs
}

Vinicius Tadeu

unread,
Feb 27, 2018, 8:58:33 AM2/27/18
to Node.js Brasil
Então, o contador regressivo será exibido para os usuários e caso nenhum usuário acessar o sistema, o leilão deve ser finalizado no fim do tempo previsto. 

Emerson Macedo

unread,
Feb 28, 2018, 11:57:38 AM2/28/18
to nod...@googlegroups.com
Viniciius,

trabalhei num projeto do mesmo tipo há + ou - 6 anos atrás.

Na época, criei uma lib para esse propósito que vc está precisando.

Vê se funciona do jeito que você precisa.


abs
Emerson Macedo
Reply all
Reply to author
Forward
0 new messages