Testando um aplicativo socket.io
no ambiente PROD pela primeira vez, descobrimos que enquanto o xhr-polling
transport (pesquisa longa Ajax) funciona, o websocket
transport não.
Olhando os dados transmitidos usando Fiddler
, posso ver que o
-
UPGRADE
acontece e
- a primeira mensagem do servidor (5 bytes brutos) chega ao cliente.
- O cliente envia algumas mensagens para o servidor, o que normalmente resulta em mensagens do cliente de servidor >
Mas essas mensagens de cliente de servidor > nunca chegam (não sei ao certo se as mensagens do servidor cliente- > chegam no lado do servidor). Eventualmente (após cerca de 6 segundos), o Fiddler reporta um
Read from Server failed...
e uma nova conexão é estabelecida, sem sucesso como a primeira.
Nossa configuração é algo parecido com isto:
Internet - > Firewall - > BIG-IP 3600 (termina SSL) - > Servidor Node.js
Eu acho que o firewall não pode ser o culpado, pois tudo o que ele vê é um fluxo de dados criptografados por SSL, e com um transporte que não é websocket, ele funciona. Eu também tentei a opção match origin protocol
em socket.io
, sem sucesso.
Infelizmente, não posso jogar livremente nesse ambiente, por isso tentei replicar o problema no meu ambiente DEV, sem sucesso. Eu criei um proxy SSL de software (usando node.js
' http-proxy
), que deve funcionar de forma semelhante ao BIG-IP. Mas passar por esse proxy SSL com websockets funciona muito bem.
Isso poderia ser um problema com o BIG-IP? Configuração? O que mais poderia ser?