Tenho varios equipamentos de rastreamento, estou desenvolvendo um servidor usando socketserver ate ai blza.
O cenario ideal de funcionamento é o seguinte:
Equipamento conecta no meu servidor
Equipamento me manda string de validação
servidor valida equipamento e manda uma @
equipamento começa o ciclo para enviar informação de 3 em 3 minutos
O que esta acontecendo,
Quando o equipamento conecta com o meu servidor e peço para buscar a string da validação esta demorando muito até ocorrer o timeout, ai vem para mim todas as informaçoes do equipamento e a conexao como equipamento é derrubada.
Por exemplo
Se o meu timeout for de 30 minutos, o equipamento vai acumulando os dados dentro dele e quando for para a conexao terminar ele me manda as informações.
Ja tentei de tudo para sanar isso e nao estou conseguindo.
Alguem tem alguma ideia do que pode estar acontecendo?
não entendi muito bem, mas o que entendi a demora esta na validação da String de validação, certo ? teria que verificar isso pq esta demorando tanto essa validação, é uma consulta no banco algo assim?
vcsmetallica
O que esta demorando muito é a String que vem do equipamento. O retorno do equipamento é que esta demorando muito.
Fiz os testes usando C# e o retorno do equipamento veio rapidinho, ja em java esta demorando muito.
Att
U
ualex
estranho… em java vc colocar server socket no ar em uma porta, quando recebi uma nova conexão vc da um “socketClient.getInputStream()” e pronto vc ja tem os dados em byte, normalmente é bem rapido… essa string é muito grande como vc esta tratando ela?
vcsmetallica
Nao. essa string tem 26 caracteres.
andei pesquisando algumas coisas, acho que o equipamento trabalha com raw socket um negocio assim.
Esta muito estranho mesmo.
Att
andre.henriques
Olá vcsmetallica,
isso tem cara que o servidor fica lendo infinitamente, até que uma exceção é gerada e ele pare de ler e envia tudo ao mesmo tempo.
[claro que é isso, rsrsrsrsrs]
para isso vc tem que definir o final da string enviado para o servidor, o servidor deve parar de ler ao chegar no final dessa string.
eu fiz um server que o final do profocolo é uma linha em branco
cliente envia “blabalbal”
cliente envie “”;
server ler equanto a leitura da linha for diferente de vazia
ao ser finalizado o server pode tratar os dados que foram enviado do cliente.
vcsmetallica
Obrigado pela dica.
Vou tentar fazer isso que vc indicou.
U
ualex
vcsmetallica:
Nao. essa string tem 26 caracteres.
andei pesquisando algumas coisas, acho que o equipamento trabalha com raw socket um negocio assim.
Esta muito estranho mesmo.
Att
então eu tenho o servidor socket na minha aplicação e eu leio os dados assim:
Em meu caso funciona, pois o cliente envia uma linha em branco para definir o final da mensagem,
vc deve verificar qual é o ‘finalizador’ do seu protoloco. poderia ser uma linha com ‘EOS’ ou qualque outra coisa…
vcsmetallica
Contar para vcs como que eu resolvi o problema. Depois de ter feito o raio da aplicação em C# tomando uma surra violenta desse tal de C# so pq o servidor socket estava demorando para me responder.