Pergunta

Eu tenho uma conexão de cliente/servidor em um soquete TCP, com o servidor escrevendo para o cliente o mais rápido possível.

Observando minha atividade de rede, o cliente de produção recebe dados em cerca de 2,5 MB/s.

Um novo cliente leve que escrevi para apenas ler e comparar a taxa tem uma taxa de cerca de 5,0 MB/s (que provavelmente está em torno da velocidade máxima que o servidor pode transmitir).

Eu queria saber o que governa as taxas aqui, já que o cliente não envia dados para o servidor para contar sobre qualquer limite de taxa.

Foi útil?

Solução

No TCP, é o cliente. Se a janela TCP do servidor estiver cheia - ela precisará esperar até que mais ACKs do cliente chegassem. Ele está oculto de você dentro da pilha TCP, mas o TCP introduz a entrega garantida, o que também significa que o servidor não pode enviar dados mais rapidamente do que a taxa em que o cliente os está processando.

Outras dicas

O TCP possui controle de fluxo e acontece automaticamente. Leia sobre isso em http://en.wikipedia.org/wiki/transmission_control_protocol#flow_control

Quando o tubo preenche devido ao controle de fluxo, as operações de gravação de soquete de E/S do servidor não serão concluídas até que o controle de fluxo seja relevado.

O servidor está escrevendo dados em 5,0 MB/s, mas se o seu cliente for o gargalo aqui, o servidor terá que esperar antes que os dados no "Buffer enviado" sejam completamente enviados ao cliente ou o espaço suficiente seja liberado para colocar mais dados.

Como você disse que o cliente leve foi capaz de receber a 5,0 MB/s, serão as operações pós-recebimento do seu cliente que você deve verificar. Se você estiver recebendo dados e processando -os antes de ler mais dados, esse pode ser o gargalo.

É melhor receber dados de forma assíncrona e, assim que o receber forem concluídos, peça aos soquetes do cliente que comecem a receber dados novamente, enquanto você processa os dados recebidos em um encadeamento de threads do thread separado. Dessa forma, seu cliente está sempre disponível para receber dados incríveis, e o servidor pode enviá -los a toda velocidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top