Implementação de Comet para ASP.NET?

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

As soluções que eu encontrei (ou poderia pensar, para esse assunto) exigem deixar um thread em execução por usuário – para que ele possa retornar uma resposta para ele assim que receber uma mensagem. Isso não é escalável, claro.

Então, minha pergunta é: você sabe de uma implementação do ASP.NET para o Comet que funciona de uma maneira diferente? Isso é possível mesmo com o IIS?

   

O cometa está desafiando a escalar com o IIS por causa da conectividade persistente do cometa, mas agora há uma equipe que olha para os cenários do Cometa. Veja também o blog de Aaron Lerch, pois acredito que ele tenha feito algum trabalho inicial com o Comet no ASP.NET.

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

Ele suporta oficialmente até 20.000 conexões simultâneas de clientes por nó de servidor, mas testes individuais têm chegado a 50.000. A taxa de transferência de mensagens é ideal em torno da marca de 1.000 a 5.000 clientes simultâneos, com mensagens entregues a até 300.000 por segundo a partir de um único nó.

Ele inclui suporte do lado do cliente para JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Tempo de Execução do Windows e .NET Compact, com suporte do lado do servidor para .NET / Mono e PHP.

Clustering é suportado usando o SQL Server ou o Azure Caching fora da checkbox, mas os provedores personalizados podem ser gravados para praticamente qualquer coisa (Redis, NCache).

Disclaimer: Eu trabalho para a empresa que desenvolve este produto.

Recentemente, escrevi um exemplo simples de um Servidor de Chat de Longa Sondagem usando Controladores Assíncronos MVC 3 baseado em um ótimo artigo de Clay Lenhart.

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

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

Na verdade, existem muitas opções para criar um site com suporte a ajax com ASP.NET, mas honestamente, o PokeIn é a maneira mais fácil de criar um aplicativo da web suportado pelo cometa ajax. Salvou um dos projetos da minha empresa.

Você também pode olhar para o Kaazing Enterprise Gateway, que fez uma versão 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 ver as demonstrações do Light Streamer

Certa vez, usei um site de bate-papo que usava um servidor de streaming HTTP personalizado. Eu realmente reproduzi esse software em um ponto por pura curiosidade, e é bastante fácil de fazer, eu acho. Eu nunca tentaria implementar um tipo semelhante de “solicitação infinita” no IIS, especialmente no ASP.NET, porque as solicitações vinculam um thread de pool de threads (ou thread de IO, se manipuladores asynchronouss são usados) indefinidamente, o que significa que você só pode manuseie tanto por servidor quanto a configuração do pool de threads permitir.

Se eu tivesse uma forte necessidade legítima de tal funcionalidade, eu honestamente escreveria um servidor http personalizado para ele.

Eu sei que isso realmente não responde à sua pergunta, mas achei que a input poderia ser relevante.

O grupo WS-I publicou algo chamado “Reliable Secure Profile” que possui uma implementação Glass Fish e .NET que aparentemente interoperam bem.

Com alguma sorte há uma implementação de Javascript por aí também.

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

Existem também versões comerciais pagas também.

Eu acho que a abordagem Comet não é realmente escalonável, a menos que você esteja preparado para expandir o web farm horizontalmente (adicionando mais servidores web ao mix). A maneira como ele funciona é que ele deixa uma conexão TCP aberta por session 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.