У меня есть библиотека, созданная на основе telnetlib Python. И недавно я заметил, что производительность в Windows XP и Linux настолько различна.Производительность Telnet в Windows XP и Linux
ниже сценарий, я разработать три операции, «получить единицы», «просто нажмите клавишу ВВОД», «получить блоки с опциями»
«получают единицы» имеет длинную строку возврата, «получить блоки с опциями» вернуться короче строка и «просто нажмите enter» вернет кратчайшую строку.
предположим, что будет потрачено больше времени, кажется, что заказ должен быть «получить единицы», «получить единицы с опциями», затем «просто нажать enter».
но фактический результат в Windows XP является:
получают единицы: +3,67200016975 s получают единицы с опциями: +10,0319998264 s просто нажмите клавишу ВВОД: 10,0 с
же тест в Ubuntu: получают единицы: 3.91432785988 получить блоки с опциями: +2,86995506287 просто нажмите клавишу ВВОД: +2,05337381363
, кажется, что Windows XP имеет хорошую производительность на большой пакет IP, но для небольшой пакет, это так плохо.
Я проверил его вручную, используя telnet-клиент Windows, шпатлевку. Использование wirehark для захвата данных telnet. И найдите, что для небольшого пакета пакетная задержка настолько длинная, около 0.2s
Я попытался изменить окно tcp, но не помогло.
Может ли кто-нибудь дать некоторые предложения?
try:
begin_g = time.time()
for i in range(50):
connection.write('ZUSI:OMU;')
ret = connection.read_until('<')
ret = connection.read_until('<')
end_g = time.time()
elapse_g = end_g-begin_g
clean_begin_t = time.time()
for i in range(50):
ret = ipa.get_units()
clean_end_t = time.time()
elapse_c = clean_end_t-clean_begin_t
begin_wu = time.time()
for i in range(50):
connection.write('')
ret = connection.read_until_prompt()
end_wu = time.time()
elapse_wu = end_wu-begin_wu
спасибо. я понял:). Задержка 0,2 с является причиной по «алгоритму ACK с задержкой ACK», его значение по умолчанию равно 0.2s – Rainman