• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

magician

Limitar velocidade do Socket

13 mensagens neste tópico

Boas como é possivel limitar a quantidade de dados transferidos por segundo por um socket?

Por exemplo enviar um ficheiro por sockets mas limitando para que apenas sejam enviados 10kb/s...

Uma solução que imaginei seria enviar blocos de 10kb e fazer um sleep de 1 sec mas parece-me um bocado rudimentar e martelado.

Não existem uma solução testada e eficazmente valida ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A única coisa que me ocorre é mesmo o enviar um bloco e no final de 1 seg, mandar outro. É assim que é feito o baud rate em ligações seriais p.e., não vejo o porquê de ser martelada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É a única maneira que conheço de o fazer.

Edit:

Mas este método pode trazer problemas, imagina que o cliente só tem 10kBps de largura de banda, se tu parares um segundo entre cada 10kB a velociade dele passa para 5kBps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consigo perceber porquê.

Porquê o quê?

Mas este método pode trazer problemas, imagina que o cliente só tem 10kBps de largura de banda, se tu parares um segundo entre cada 10kB a velociade dele passa para 5kBps.

Envias byte a byte e a cada byte vê se passou 1 seg. Se não passou, fazes o sleep, caso contrário continuas.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é que só vai enviar a 5 nesse caso.

Ou seja, não percebo o que o fnds quis dizer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele está a dizer que se o cliente consegue apenas receber 10kB por segundo, se tu fazes uma pausa de 1seg sempre que envias 10kB, o cliente vai receber 10kB no 1o segundo, 0kB no segundo, 10kB no terceiro, etc, o que dá uma média de 5kB/s.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele está a dizer que se o cliente consegue apenas receber 10kB por segundo, se tu fazes uma pausa de 1seg sempre que envias 10kB, o cliente vai receber 10kB no 1o segundo, 0kB no segundo, 10kB no terceiro, etc, o que dá uma média de 5kB/s.

Epá mas vai ser de 1 em 1 segundo que escreves para o buffer, não o que o cliente recebe. A velocidade que o cliente recebe não entra sequer na equação, porque vais estar a escrever 10kB de 1 em 1 segundo.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá mas vai ser de 1 em 1 segundo que escreves para o buffer, não o que o cliente recebe. A velocidade que o cliente recebe não entra sequer na equação, porque vais estar a escrever 10kB de 1 em 1 segundo.

Tens a certeza que não é possível saber quando é que os 10kB são transmitidos?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que é possível, mas o que é que se ganha com isso?

Se se quer limitar a velocidade de upload só é preciso controlar a velocidade com que se escreve pro socket, não interessa para nada a velocidade do cliente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactamente.

Até porque a pausa é depois de enviares 10 (assume-se instantâneo) e não depois dele receber esses 10.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora