2015-06-13 3 views
0

я был дан пример проекта, который идет как это:Настройка клиента пропускной способности в простом сервере TCP

  1. Клиент A подключается к серверу B.
  2. А посылает пакет в B, B возвращает тот же самый пакет А .
  3. Клиент Передающая пропускная способность настраивается
  4. Измерьте время обработки в пакете.

Теперь шаг 3 - это то, что меня смущает.

Использование python, единственный способ, которым я могу думать о «настройке пропускной способности», - установить задержку между символами в строке.

  1. Возьмите строку «тест»
  2. запустить таймер, а затем отправить «T» на сервер, и есть сервер возвращает его.
  3. Как только сервер вернет его, остановите таймер и запишите его.

Затем вызовите sleep() в течение определенного периода времени (это конфигурируемый часть)

Затем сделайте то же самое для письма

e 
s 
t 

протоколирования, то время между ними.

Однако это кажется глупым, потому что я совсем не влияю на отношения между клиентом и сервером, просто устанавливая задержку между передаваемыми символами.

Или я что-то упускаю? Есть ли способ «настроить» пропускную способность клиента A, и если да, что бы это значило?

спасибо.

ответ

1

Вы можете настроить пропускную способность клиента A - в более широком окне, скажем, 1 секунду. Прежде всего отправка отдельных пакетов с 1 символом будет «отрицательно влиять» на вашу пропускную способность, поскольку ваша полезная нагрузка мала по сравнению с заголовками, которые будут прикреплены.

Способ получения приемлемой измеримой пропускной способности - отправка MSS-пакетов (как правило, 1460 байт в средах Ethernet). Теперь вы можете сделать что-то вроде следующего: отправить «всплески» из «n» пакетов в секунду. Так, например. если вам нужна пропускная способность 14600, вы можете сделать

burstsize = 10 
for i in range(burstsize): 
    sock.write(data) 

Каждую секунду. Теперь, как вы достигаете - одну секунду? Ну, это немного сложно и очень сложно сделать точным - но что-то вроде этого.

сделать time.time() перед for, сделать time.time() после for, а затем после этого сделать простой select для оставшегося времени. (Это способ введения задержки). Таким образом, широкий скелет

while True: 
    t1 = time.time() 
    for i in range(burstsize): 
     sock.write(1460) 
    t2 = time.time() 
    if t2 - t1 < 1.0: 
     tout = 1.0 - (t2-t1) 
     select.select([], [], [], tout) # 

Это очень упрощенно, но должно дать справедливое представление о том, как это сделать

Измерение времени обработки для каждого пакета довольно сложно - и точно не говорит о задержке в сети для TCP, поскольку на это будет влиять управление потоком TCP. Лучше использовать UDP для измерения времени обработки, если вы заинтересованы в понимании базовых характеристик сети, таких как пропускная способность/латентность.

+0

Got it. Я думаю, что они собираются, это первая идея, отправляющая пакет размером n на сервер. Я не знаю, почему я об этом не думал. Я не думаю, что теперь я должен обязательно дать ему временную задержку, я думаю, что могу просто закодировать его, чтобы на сервер был отправлен пакет N размера, с помощью которого пользователь настраивает, что такое N. Спасибо! – Marcin

Смежные вопросы