Socket.IO deixando de emitir mensagens aos clientes

68 views
Skip to first unread message

Fabrício Muniz

unread,
Apr 13, 2015, 10:44:32 AM4/13/15
to nod...@googlegroups.com
Bom dia amigos, alguém poderia me dar uma ajuda para que eu possa identificar o que está ocorrendo com meu serviço em NodeJS?

O serviço
Seguinte, implementei um serviço em nodejs para poder exibir em tempo real o log de uma determinada API aqui da empresa. O serviço, resumidamente, é simples: ouvir um log e notificar, aos clientes conectados, algumas informações (cálculos, gráficos e etc...).

Eu não sou main desenvolvedor Node mas pela simplicidade dessa demanda, consegui fazer o serviço roda lendo documentação e consultando a comunidade.

O serviço faz uso do Express (apesar de não se fazer uso do webserver), Tail, SocketIO e Forever.

O Problema
O problema é que por algum motivo, após algum tempo rodando certo, o serviço pára de notificar aos clientes, mesmo ao se abrir uma nova conexão/instancia ao socketIO (http://<DOMINIO>:<PORTA>/socket.io/?EIO=3&transport=polling...).

Eu pude verificar através do log gerado pelo forever, que o tail nem sempre retorna o output do servidor se comparado ao comando tail no terminal. Às vezes ele vem incompleto (pega a metade da linha do log), fazendo com que muitas instruções caiam no catch por não conseguir executar o split() nem o replace(), por exemplo.

Dúvida
Minha dúvida é se há uma forma melhor de ser monitorar um log, e como identificar o que ocorre com o socketio, pois após "para de notificar" ele continua a logar cada novo cliente (sei disso pois no logo do forever tá lá "nova coneexão estabelecida..."), mas não emite o processamento.
Seria mais aconselhável exibir o output do log em sua totalidade, por completo e executar as operações de limpeza e tratamento (split, replace e formatação) no próprio cliente ao invés de se tratar no serviço?

Segue o serviço levantado: 

Obrigado,
Fabrício

Pineli

unread,
Apr 13, 2015, 12:08:48 PM4/13/15
to nod...@googlegroups.com
Fabrício, eu também estou com um mistério deste para solucionar. No meu caso através de outros eventos consigo verificar pelo browser que o socket esta ativo e funcionando mas os eventos 'push' param de chegar. 

--
Você recebeu essa mensagem porque está inscrito no grupo "Node.js Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Fabrício Muniz

unread,
Apr 13, 2015, 2:00:00 PM4/13/15
to nod...@googlegroups.com
Pineli, seu quadro é parecido com o meu?
Não estou certo, mas no meu caso creio que seja algo relacionado à quantidade de push por tempo. Aqui são emitidos cerca de 60 mil notificações por dia com picos de ~100 mil.

Estou procurando algum benchmark que associe o socketio + tail.
Percebi também que o acesso de leitura ao nosso storage server, que é onde fica o log, está muito lento.

Qualquer atualização eu posto aqui.

Pineli

unread,
Apr 13, 2015, 5:28:19 PM4/13/15
to nod...@googlegroups.com
Aqui meu cenário é bem mais tranquilo, é mais ou menos 15 mil notificações dias espalhadas em picos de 2 mil conexões websockets. alguns sockets tem uma carga maior, tipo 10 por minuto, não passa disso. Fora isso, caso não exista o socket de tal receptor a mensagem só é gravada em banco. (mysql)
Tenho 2 problemas, por exemplo... se as 2 mil conexões estiverem ativas e eu precisar reiniciar, o servidor ou a aplicação, ainda não consegui identificar com certeza, não aguenta. O Websocket possui um timeout 'of helll' que mantem as conexões inativas por um tempo (assim as novas chegar e acumulam, chegando a 10k) e por outro lado ele as desconectam sem necessidade em outro tempo (ta no código do socket.io). Isso ferra tudo.

O outro problema é na reconexão, tudo sobre, trafego, requisições, banco...  quase trava a máquina. Esta com um servidor de 8 core e 16Gb Ram. Pelo fama do Node+socket.io eu achava que 2k conexões seria fichinha mas não é bem assim na prática.

Estou nesse enrosco.... o pior que após as conexões estabilizarem (parar de cair e voltar) o trafego de dados, memoria, cpu do server fica o mínimo. 

Se encontrar alguma solução de configuração de Hardware ou do Node para este problema, posta ai...  rsrs

abraço
Reply all
Reply to author
Forward
0 new messages