Como o SignalR funciona internamente?

160

Alguém pode me informar como o SignalR funciona internamente de maneira de alto nível?

Acho que está liberando os dados usando Response.Flushe, no lado do cliente, está enviando solicitações do Ajax em determinados intervalos. Está correto?

user960567
fonte
13
O @dfowler fez uma entrevista com Scott Hansleman recentemente que foi muito informativa hanselminutes.com/291/… .
Alinhado
1
Bom artigo sobre a arquitetura do sinal r e como ele funciona #: 58533
Mahesh
Eu sei que há muito tempo, mas microsoftvirtualacademy.com/Content/...
lordkain
1
Veja também esta apresentação na NDC 2013 de David Fowler e Damian Edwards chamada 'Under the cover with ASP.NET SignalR', onde eles constroem uma versão lite do SignalR ao vivo no palco. É muito informativo. É pré 2.0, mas isso não deve importar muito. vimeo.com/68383353
Johan B

Respostas:

241

Não, SignalR é uma abstração através de uma conexão. Ele fornece dois modelos de programação nessa conexão (hubs e conexões persistentes). O SignalR tem um conceito de transporte, cada transporte decide como os dados são enviados / recebidos e como eles se conectam e desconectam.

O SignalR possui alguns transportes integrados:

  1. WebSockets
  2. Eventos Enviados pelo Servidor
  3. Forever Frame
  4. Votação longa

O SignalR tenta escolher a "melhor" conexão suportada pelo servidor e pelo cliente (você também pode forçá-lo a usar um transporte específico).

Esse é o nível alto. Se você quiser ver como cada transporte é implementado, consulte o código-fonte .

Também há código de cliente para cada transporte: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Se você está perguntando sobre como o transporte de pesquisas longas funciona em particular:

Ele envia uma solicitação ajax para o servidor que está esperando assincronamente por um sinal para responder. Quando um sinal ou a solicitação atinge o tempo limite, ela retorna do servidor e envia outra solicitação e o processo continua. (Deixei alguns detalhes sobre como o cliente registra o que viu para não perder mensagens)

Espero que isso responda a maior parte de sua pergunta.

davidfowl
fonte
3
você pode me dizer quantas conexões ele suporta de uma só vez?
Farhad-Taran
1
O número de conexões suportadas pelo Signalr depende do limite de solicitações do IIS. Pode ser aumentado usando entradas de configuração ou scripts de shell. Normalmente, o Signalr armazena em cache 1000 conexões na memória.
Thanigainathan
1
Como já mencionado, o rally de limite está no nível do servidor. Damnien Edwards (co-criador do SignalR) tem 150.000 conexões de um único servidor de 10 GB: twitter.com/DamianEdwards/status/486642486350061568
LDJ
qualquer resposta a esta pergunta stackoverflow.com/q/40906789/3565879
Technacron
@davidfowl por favor, dê resposta para isso stackoverflow.com/questions/47504489/...
Hitesh Thakor
5

@davidfowl já respondeu à maior parte. No entanto, para fornecer mais alguns detalhes sobre a diferença no comportamento dos transportes, especificamente entre o WebSocket e outros transportes; abaixo estão alguns pontos.

  • O WebSocket é o único transporte que estabelece uma conexão bidirecional verdadeira e persistente entre cliente e servidor. No entanto, o WebSocket é suportado apenas pelo IIS 8 ou superior e pelas versões mais recentes do Internet Explorer, Google Chrome e Mozilla Firefox.
  • Enquanto os eventos enviados pelo servidor, o Forever Frame e a pesquisa longa, os três seguem uma comunicação unidirecional e são suportados pela maioria dos navegadores.
shivam
fonte