SocketTimeout + consumo de processamento

5 respostas
Abdon

Ola pessoal, estou desenvolvendo uma aplicação que precisa acessar um servidor via telnet, para isto estou utilizando um cliente telnet da apache, que encapsula as requisições via socket.

Depois de enviar a requisição, a reposta esta sendo pega da seguinte maneira:

while (!done) {
                if (System.currentTimeMillis() &gt= finalTime) {
                    throw new SocketTimeoutException();
                }
                
                if (this.inputStreamReader.ready()) {
                    len = this.inputStreamReader.read(charsFromCAI);
                    
                    dataFromCAI.append(new String(charsFromCAI, 0, len));
                                            
                    if (dataFromCAI.toString().indexOf(finalDelimiter) &gt= 0) {
                        done = true;
                    }
                }
            }
onde o inputStreamReader é um InputStreamReader que foi instanciado atrazer do inputStream do socket.

O problema e que quando existe um timeout, o while fica rodando e rodando consumindo todo processamento da maquina  <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/f.pngrowning.png?v=9" title=":frowning:" class="emoji" alt=":frowning:">

Alguem saberia como me apontar uma forma de resvolver este problema?

(o consumo de maquina no timeout)

(ps: to pensando em dar um sleep na thread main quando não entrar no if, so que isto é muito POG)

5 Respostas

T

Se eu tivesse de fazer algo parecido (efetuar um polling usando “ready”) usaria Thread.sleep mesmo. Não é POG (aliás, isso é sigla para o quê?)

Proteu_Alcebidiano

Programação Orientada a Gambiarras

Abdon

hehehehe é isto mesmo POG…
O problema é que isto é um processo batch que efetua request a este servidor na escala de milhões, e fazer um sleep poderia influenciar na performance, vcs acham que isto poderia acontecer?

Luca

Olá

O Socket é um SocketChannel?

Além do SocketChannel,use também Selector do java.nio.

[]s
Luca

Abdon

Não, ele não é um socketchannel, vou fazer uns testes com ele.

Criado 1 de novembro de 2006
Ultima resposta 2 de nov. de 2006
Respostas 5
Participantes 4