Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Estou recebendo mensagens duplicadas em meu aplicativo clustered node.js/socket.io/redis pub/sub


Eu tenho lutado com cluster e socket.io. Toda vez que uso a função de cluster (embora eu use o cluster Nodejs integrado), recebo muitos problemas de desempenho e problemas com o socket.io.

Ao tentar pesquisar isso, tenho pesquisado os relatórios de bugs e similares no git do socket.io e qualquer pessoa que use clusters ou balanceadores de carga externos em seus servidores parece ter problemas com o socket.io.

Parece produzir o problema "cliente não handshaken client deve reconectar", que você verá se aumentar o log detalhado. Isso aparece muito sempre que o socket.io é executado em um cluster, então acho que ele volta a isso. Ou seja, o cliente é conectado à instância aleatória no cluster socket.io toda vez que faz uma nova conexão (ele faz várias conexões http/socket/flash ao autorizar e mais o tempo todo depois ao pesquisar novos dados).

Por enquanto, voltei a usar apenas 1 processo socket.io por vez, isso pode ser um bug, mas também pode ser uma falha de como o socket.io é construído.

Adicionado:Minha maneira de resolver isso no futuro será atribuir uma porta exclusiva para cada instância do socket.io dentro do cluster e, em seguida, selecionar a porta do cache no lado do cliente.