Implementação do cometa para ASP.NET? [fechadas]

103

Estive procurando maneiras de implementar mensagens do tipo gmail dentro de um navegador e cheguei ao conceito do Comet . No entanto, não consegui encontrar uma boa implementação do .NET que me permita fazer isso no IIS (nosso aplicativo foi escrito em ASP.NET 2.0).

As soluções que encontrei (ou nas quais poderia pensar, nesse caso) exigem deixar um thread em execução por usuário - para que ele possa retornar uma resposta assim que receber uma mensagem. Isso não escala de forma alguma, é claro.

Portanto, minha pergunta é - você conhece uma implementação ASP.NET para o Comet que funciona de uma maneira diferente? Isso é possível com o IIS?

Doron Yaacoby
fonte
12
Acho que a implementação inicial abençoada pelo MS é SignalR: hanselman.com/blog/…
user423430
Node.JS agora tem suporte no Azure, em breve o IIS em 2003 terá suporte. Isso significa que poderemos executar o servidor comet dentro do IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Respostas:

44

O Comet é desafiador para escalar com o IIS por causa da conectividade persistente do cometa, mas há uma equipe analisando os cenários do Cometa agora. Veja também o blog de Aaron Lerch, pois acredito que ele fez alguns trabalhos iniciais do Comet no ASP.NET.

Scott Hanselman
fonte
9
Isso é realmente implementado; verifique o WebSync, de acordo com a resposta de Anton abaixo. ( frozenmountain.com/websync )
jvenema,
3
Alguém chamou ajax reverso? verifique isto: pokein.codeplex.com
Zuuum
4
Os controladores assíncronos MVC podem ajudar a combater os problemas do IIS, descarregando a espera para threads de trabalho não IIS, consulte esta excelente postagem de Clay Lenhart . Consulte também Projeto de exemplo de servidor de bate-papo no BitBucket.
Jacob,
33

WebSync é um servidor Comet escalonável em conformidade com os padrões que se integra diretamente ao pipeline IIS / .NET. Também está disponível sob demanda como um serviço hospedado.

Oficialmente, ele suporta até 20.000 conexões de cliente simultâneas por nó de servidor, mas testes individuais chegaram a 50.000. O rendimento da mensagem é ideal em torno da marca de 1.000-5.000 clientes simultâneos, com mensagens entregues em até 300.000 por segundo de um único nó.

Inclui suporte do lado do cliente para JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime e .NET Compact, com suporte do lado do servidor para .NET / Mono e PHP.

O clustering é compatível com o SQL Server ou o Cache do Azure pronto para uso, mas os provedores personalizados podem ser escritos para praticamente qualquer coisa (Redis, NCache).

Isenção de responsabilidade: Eu trabalho para a empresa que desenvolve este produto.

Anton
fonte
17
deve haver uma isenção de responsabilidade aqui, já que é seu produto ...
Sam Saffron
9
Claro, é produzido pela empresa para a qual trabalho :) Definitivamente, não estou tentando esconder nada.
Anton
1
@Anton - não esconder algo não é o mesmo que revelar.
RedFilter
1
@Anton Você pode elaborar mais sobre como ele suporta até 20k conexões de cliente simultâneas por nó de servidor? Esses números parecem, bem .. "muito grandes".
Pacerier
1
Acho que não seria prudente perguntar como o websync funciona nos bastidores, conceitualmente - de uma visão de 25.000 pés, é claro.
nocarrier
15

Recentemente escrevi um exemplo simples de um servidor de bate-papo de longa sondagem usando MVC 3 Async Controllers baseado em um ótimo artigo de Clay Lenhart

Você pode usar o exemplo em uma implantação AppHarbor que configurei com base na fonte do projeto BitBucket.

Além disso, mais informações disponíveis no meu blog explicando o projeto .

Jacob
fonte
Gosto do exemplo de implantação de
AppHarbor
'postagem do blog explicando o projeto' -> web.archive.org/web/20130328042214/http://…
jaybro
Obrigado! Que bom que você gostou do artigo.
Clay Lenhart
4

Na verdade, existem muitas opções para criar um site com suporte para Ajax com ASP.NET, mas, honestamente, PokeIn é a maneira mais fácil de criar um aplicativo da Web compatível com Ajax Cometa. Salvou um dos projetos da minha empresa.

BigbangO
fonte
3

Você também pode olhar para o Kaazing Enterprise Gateway, que fez um lançamento de produção de seu gateway webSocket [HTML5], que substitui completamente o caminho do cometa e permite conexões full-duplex entre navegadores e servidores de aplicativos.

Você também pode dar uma olhada em Light Streamer Demos

Vikram
fonte
1

Certa vez, usei um site de bate-papo há muito tempo que utilizava um servidor de streaming http personalizado. Na verdade, reproduzi esse software em um ponto por pura curiosidade, e acho que é fácil de fazer. Eu nunca tentaria implementar um tipo semelhante de "solicitação infinita" no IIS, especialmente no ASP.NET, porque as solicitações amarram um thread de pool de threads (ou thread de E / S, se manipuladores assíncronos forem usados) indefinidamente, o que significa que você só pode lidar com tanto por servidor quanto sua configuração de pool de threads permite.

Se eu tivesse uma forte necessidade legítima dessa funcionalidade, honestamente, escreveria um servidor http personalizado para ela.

Sei que isso não responde realmente à sua pergunta, mas achei que a entrada pode ser relevante.

Chris
fonte
1

O grupo WS-I publicou algo chamado "Perfil Seguro Confiável" que tem uma implementação Glass Fish e .NET que aparentemente opera bem.

Com alguma sorte, existe uma implementação Javascript por aí também.

Também existe uma implementação do Silverlight que usa HTTP Duplex. Você pode conectar o javascript ao objeto Silverlight para obter retornos de chamada quando ocorrer um push.

Existem também versões comerciais pagas .

goodguys_activate
fonte
4
Publicar em massa a mesma resposta em uma série de perguntas em sucessão curta tende a acertar algumas bandeiras ...
Marc Gravell
2
( psst )
0

Acho que a abordagem do Comet não é realmente escalonável, a menos que você esteja preparado para expandir o farm da web horizontalmente (adicionando mais servidores da web à mistura). A maneira como funciona é que deixa uma conexão TCP aberta por sessão de usuário, apenas para que o servidor possa enviar coisas para essa conexão de tempos em tempos para informar imediatamente o usuário sobre uma mudança ou atividade.

cruizer
fonte
6
Tudo só é escalonável verticalmente até um ponto, após o qual o escalonamento horizontal deve ocorrer.
Anton