Jump to content
Sign in to follow this  
vastri

VB.Net (Long polling - Websockets)

Recommended Posts

vastri

Olá,

Tenho uma aplicação Windows Forms - SQL (online), e estou com um problema preciso que o utilizador tenha informação em tempo real de novo dado adicionado à tabela, explico, onde tenho visto isto acontecer de forma mais evidente é nos sites de leilões que agora estão na moda os penny auctions ex. www.wellbid.com ao licitar o novo valor fica imediatamente disponível para todos os utilizadores, também o relógio tem que estar com os mesmos valores para todos, já andei a ver Long Polling e Websockets mas não sei se a técnica utilizada é esta, é provável que tenha que ter um navegador para fazer isto, mas ai não há problema posso apresentar os dados num controle WebBrowser, mas como digo não sei se estas são as técnicas utilizadas.

Por opção, o que me ocorre é utilizar um Timer com intervalo muito pequeno a atualizar o DataSet, mas isto dependendo da quantidade de utilizadores causará consultas numerosas à bd e o servidor não vai gostar.

Alguém me pode ajudar como fazer isto?

Agradecido

PS: sou iniciante

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
pikax

Tens varias formas para fazer isso:

  • podes ter o timer a ir buscar a tabela toda.
  • podes estar connectado com um socket ao servidor, quando o servidor actualiza, manda uma mensagem a todos os connectados.
  • podes ir buscar a informacao que mudou de tempos a tempos.
  • podes ter um web-service que te faca ja' o heavy-lifting por ti.
  • etc...etc....etc..


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
vastri

pikax obrigado,

Tens varias formas para fazer isso:

  • podes ter o timer a ir buscar a tabela toda.
  • podes ir buscar a informacao que mudou de tempos a tempos.

Em relação as estas possibilidades e limitado ao meus conhecimentos é a hipótese que tinha, era: 1 timer com intervalo de 1 segundo (parece-me razoável), a executar um select count (Scalar) para verificar se existiam novos registos e um (Reader) a apresentar dados.

Mas isto calculo eu que dependendo do numero de utilizadores conectado irá requerer muito do servidor, não tenho ideia de quanto será necessário para "berrar" o servidor (se é que isto se pode medir desta forma), uma conta simples 5 minutos, 600 utilizadores ( :) nunca irá acontecer, isto é para uma comunidade de mergulhadores) dá qualquer coisa como 180.000 consultas nesses 5 minutos, será que o servidor a esta altura não estava já em baixo???

P.f. alguns conselhos se isto pode ser aplicado desta forma?!

Tens varias formas para fazer isso:

  • podes estar connectado com um socket ao servidor, quando o servidor actualiza, manda uma mensagem a todos os connectados.

Isto parece-me mais apropriado, em vez do cliente enviar sucessivas consultas ao servidor será o servidor a enviar informação ao cliente quando existe, o problema está em como fazer p.f. dá-me algumas luzes, por onde devo começar, que informação devo procurar, etc... já li muita coisa mas quanto mais leio mais confuso fico, não consigo encontrar nada objetivo ou algo que me indique o caminho correto a seguir.

Tens varias formas para fazer isso:

  • podes ter um web-service que te faca ja' o heavy-lifting por ti.

Estou a zero, não tenho ideia de como fazer...

Tens varias formas para fazer isso:

  • etc...etc....etc..

Que inveja eu sem uma única solução e tu com este etc... todos

Em suma, não preciso de luzes (talvez holofotes) para todas as possibilidades, diz-me na tua opinião qual a melhor solução e p.f. aponta-me os holofotes.

bioshock obrigado, boa pergunta mas não sei responder, quanto mais informação adquiro mais iniciante me sinto :D , já percebi que talvez isto não seja tarefa fácil, parece-me ser para quem percebe realmente da coisa mas lá vou tentando "arranhar".

Os teus links apontam para a solução web-service, tive alguma dificuldade em decifrar (não entendo nada de PHP) mas segundo compreendi a aplicação desktop faz o update através do web-service para a pagina PHP que por sua vez faz o "update real" e devolve valores ficando a informação real disponível ao utilizador, é isto? Se assim for é bom não existem consultas constantes da parte cliente, só quando um novo update existe.

Deduzi bem? Se sim só tenho que "desembrulhar" isto para asp.net(vb)?!

Share this post


Link to post
Share on other sites
pikax
Em relação as estas possibilidades e limitado ao meus conhecimentos é a hipótese que tinha, era: 1 timer com intervalo de 1 segundo (parece-me razoável), a executar um select count (Scalar) para verificar se existiam novos registos e um (Reader) a apresentar dados.

Mas isto calculo eu que dependendo do numero de utilizadores conectado irá requerer muito do servidor, não tenho ideia de quanto será necessário para "berrar" o servidor (se é que isto se pode medir desta forma), uma conta simples 5 minutos, 600 utilizadores ( :) nunca irá acontecer, isto é para uma comunidade de mergulhadores) dá qualquer coisa como 180.000 consultas nesses 5 minutos, será que o servidor a esta altura não estava já em baixo???

P.f. alguns conselhos se isto pode ser aplicado desta forma?!

Depende da "carga" que iras dar ao servidor, e a maquina que e' o servidor.

Este a a solucao mais facil de se implementar mas tambem e' umas das mais pesadas.

Isto parece-me mais apropriado, em vez do cliente enviar sucessivas consultas ao servidor será o servidor a enviar informação ao cliente quando existe, o problema está em como fazer p.f. dá-me algumas luzes, por onde devo começar, que informação devo procurar, etc... já li muita coisa mas quanto mais leio mais confuso fico, não consigo encontrar nada objetivo ou algo que me indique o caminho correto a seguir.

Tens que procurar web-sockets para .Net.

Esta era uma boa implementacao para aprenderes umas coisas porreiras :)

Estou a zero, não tenho ideia de como fazer...

esta e' uma implementacao mais logica para ter o trabalho feito, sem muita carga no servidor... os links que o Bioshock mandou falam em web-services, basicamente tens uma aplicacao no servidor e o cliente "executa" funcoes do servidor.

O Visual Studio ja' te da' muitas das ferramentas para fazers um web-service facilmente.

Os teus links apontam para a solução web-service, tive alguma dificuldade em decifrar (não entendo nada de PHP)....

Podes tambem fazer em Asp.Net, sera'-te mais facil, visto que ja' conheces a linguagem.

EDIT:

Que inveja eu sem uma única solução e tu com este etc... todos

Como em quase todos os problemas em informatica existem varias formas de resolver o mesmo problema, ate' se conseguia resolver mandando uma carta via CTT :D

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
vastri

Vamos esquecer a opção CTT eles andam a fechar lojas talvez as cartas não cheguem a tempo, não me parece uma boa ideia :cheesygrin: .

timer atualizando dados

O servidor que estou a usar foi o mais barato que encontrei e por isso está superlotado, não é bom não é mau é uma m... ainda a carga vem a milhas já ele está a berrar por todos os lados...

Vamos esquecer esta opção parece-me desenrascanço de iniciante :) .

web-sockets

Sim parece-me que tinha mesmo aqui umas coisas porreiras para aprender, mas do que vi e para o meu nível está um pouco confuso, não cheguei lá...

web-services

Ainda não tinha ido por esta hipótese, dei uma vista de olhos rápida e sim descobri logo que o Visual Studio (Framework 4.5 principalmente) trás umas funcionalidades relativamente fáceis de por em pratica, já tenho a logica do bioshock (vou transformar para asp.net), talvez consiga dar a volta à coisa por esta opção, faço bem em ir por aqui?

Sai pergunta estupida de iniciante: Será possível os resultados serem devolvidos para um form (app desktop) em vez de para uma pagina web.

Share this post


Link to post
Share on other sites
pikax

web-sockets

Sim parece-me que tinha mesmo aqui umas coisas porreiras para aprender, mas do que vi e para o meu nível está um pouco confuso, não cheguei lá...

E' um solucao que te ira' dar trabalho, porque necessitas de aprender a "filosofia" dos sockets, e saber implementar-lo.

web-services

Ainda não tinha ido por esta hipótese, dei uma vista de olhos rápida e sim descobri logo que o Visual Studio (Framework 4.5 principalmente) trás umas funcionalidades relativamente fáceis de por em pratica, já tenho a logica do bioshock (vou transformar para asp.net), talvez consiga dar a volta à coisa por esta opção, faço bem em ir por aqui?

deve ser das melhores opcoes para ti.

Sai pergunta estupida de iniciante: Será possível os resultados serem devolvidos para um form (app desktop) em vez de para uma pagina web.

O web service da' para forms, asp, php,etc...


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
vastri

pesquisando mais um pouco, acho que descobri a solução para todos os problemas SignalR.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.