socket.io termina com HAproxy

1

Eu ainda estou lidando com a configuração do HAproxy para fazê-lo funcionar com o socket.io.

minha última pergunta foi esta: HAProxy está armazenando o encaminhamento em cache? e recebi está funcionando, mas por algum motivo, depois que a autenticação é feita e os comandos são enviados, a conexão é interrompida e uma nova conexão é feita como você pode ver aqui:

  info  - handshake authorized 2ZqGgU2L5RNksXQRWuhi
  debug - setting request GET /socket.io/1/websocket/2ZqGgU2L5RNksXQRWuhi
  debug - set heartbeat interval for client 2ZqGgU2L5RNksXQRWuhi
  debug - client authorized for 
  debug - websocket writing 1::
  debug - websocket received data packet 5:3+::{"name":"ferret","args":["tobi"]}
  debug - sending data ack packet
  debug - websocket writing 6:::3+["woot"]
  info  - transport end (socket end)
  debug - set close timeout for client 2ZqGgU2L5RNksXQRWuhi
  debug - cleared close timeout for client 2ZqGgU2L5RNksXQRWuhi
  debug - cleared heartbeat interval for client 2ZqGgU2L5RNksXQRWuhi
  debug - discarding transport
  debug - client authorized
  info  - handshake authorized WkHV-B80ejP6MHQTWuhj
  debug - setting request GET /socket.io/1/websocket/WkHV-B80ejP6MHQTWuhj
  debug - set heartbeat interval for client WkHV-B80ejP6MHQTWuhj
  debug - client authorized for 
  debug - websocket writing 1::
  debug - websocket received data packet 5:4+::{"name":"ferret","args":["tobi"]}
  debug - sending data ack packet
  debug - websocket writing 6:::4+["woot"]
  info  - transport end (socket end)

Eu tentei várias configurações, algo assim: link

e também declarar 2 back-ends e usar a ACL para encaminhar para um back-end que tenha o       opção http-fingir-keepalive quando a solicitação é uma solicitação de websocket e para um backend que tem http-server-close quando a solicitação é apenas para arquivos estáticos de socket.io ou qualquer outro tipo de solicitação que não seja websocket.

Eu gostaria de esclarecer que o http-server-close está apenas no backend nginx e no backend de arquivos estáticos, o http-pretend-keepalive está no frontend all e no backend websocket.

alguém poderia me indicar a direção certa? Eu tentei várias combinações e nenhum funcionou até agora :(

    
por shadow_of__soul 28.11.2012 / 18:31

1 resposta

1

recebi uma resposta da lista de preparação do HAproxy, onde um usuário chamado "Baptiste" me forneceu este link:

link

essa configuração funciona perfeitamente com o socket.io (testado com todos os protocolos, exceto flashsockets). O que o faz funcionar é o conjunto de opções na diretiva padrão, as verificações para websockets nos backends e as verificações de cabeçalhos não são realmente necessárias e você pode definir sua própria ACL para o que precisar decidir se usar o backend que está executando o aplicativo socket.io ou não.

A versão estável do HAproxy não funciona com essa configuração, você precisa de um 1.5-devel10 ou mais recente para que ele funcione (usei a versão 1.5-devel14).

    
por 29.11.2012 / 12:58