HTML5 Client: Qual é a diferença entre Websockets e XHR?
Websockets é a conexão persistente que pode ser usada para receber/enviar dados sem ordem sequencial e sem cabeçalho http.
Xhr-polling cria uma nova solicitação com cabeçalho http e aguarda a resposta com cabeçalho http, também em ordem sequencial.
Fazendo isso, o fluxo de dados XHR sempre se parece com isto:
HTTP_HEADER_REQUEST -> HTTP_HEADER_ANSWER HTTP_HEADER_REQUEST -> HTTP_HEADER_ANSWER e assim por diante
também antes que os dados possam ser baixados, eles devem ser solicitados com HTTP_HEADER, portanto seu nome: xhr-polling.
O fluxo de dados do Websockets pode parecer assim:
DADOS_ENVIO_QUADRO DADOS_ENVIO_QUADRO DADOS_RECEBIMENTO_QUADRO DADOS_ENVIO_QUADRO DADOS_RECEBIMENTO_QUADRO DADOS_RECEBIMENTO_QUADRO
Além disso, é o envio/recebimento de dados aleatórios sem uma ordem sequencial especial e sem nenhum dado de cabeçalho http.
Isso torna o uso com proxies reversos impossível devido à falta de suporte a Websockets pela maioria dos proxies reversos conhecidos; mas metade do transporte xhr pode funcionar com o proxy reverso Apache.
Veja também: Cliente HTML5: Navegadores Suportados