Конференция "Сети" » Скорость передачи строк через TTcpServer - TTcpClient
 
  • kotyara (20.04.09 17:44) [0]
    Нужно передать список переменных (набор строк в виде Name=Value) от сервера к клиенту (и наоборот) по каналу "TTcpServer - TTcpClient".
    Собственно передачу данных я отладил хорошо и проблем со структурированными данными не возникает.
    Проблема возникла только со скоростью передачи строк в любом виде, когда возникла необходимость передавать текст.

    Ниже приведена выдержка из протокола обмена сервера с клиентами, где видно, что на передачу 33 строк общим объемом 2172 байт уходит аж 7 секунд!
    Передаю строки "кусочками" (блоками) по 63 символа (как ShortString[63]). Пробовал и по 1 байту, и по 255 и по 128.... разницы практически нет!
    Пробовал чередовать передачу блока данных с премом ответа от клиента (скажем эффективную длину только что полученного блока),
    передавать блоки непрерывно - нечего не помогает.

    18.04.2009 8:17:43 Соединение с компьютером "HOST" [IP-ADDR] закрыто. Время соединения: 00:00:08, всего принято 358 байт, отправлено 5796 байт. Средняя скорость обмена данными: 769,25 байт/сек.
    18.04.2009 8:17:43 На компьютер "HOST" [IP-ADDR] передано 64 байт (1 пакет(ов)): список переменных файлового сервера.
    18.04.2009 8:17:43 На компьютер "HOST" [IP-ADDR] передано 2172 байт (33 пакет(ов)): список переменных подразделения.
    18.04.2009 8:17:35 Установлено соединение с компьютером "HOST" [IP-ADDR]. Всего активных соединений: 1.

    Передаю те же самые данные, но записями по 289 байт
    TVariable = record
     Name: string[32];
     Value: string[255];
    end

    Получается, что на каждую "строку" тратится больший объем трафика, причем в большинстве случаев как минимум половина - впустую!
    Но скорость в восемь раз больше!!!!

    18.04.2009 8:28:43 Соединение с компьютером "HOST" [IP-ADDR] закрыто. Время соединения: 00:00:01, всего принято 184 байт, отправлено 13386 байт. Средняя скорость обмена данными: 13 570,00 байт/сек.
    18.04.2009 8:28:43 На компьютер "HOST" [IP-ADDR] передано 289 байт (1 пакет(ов)): список переменных файлового сервера.
    18.04.2009 8:28:43 На компьютер "HOST" [IP-ADDR] передано 9537 байт (33 пакет(ов)): список переменных подразделения.
    18.04.2009 8:28:42 Установлено соединение с компьютером "HOST" [IP-ADDR]. Всего активных соединений: 1.

    Получается парадокс - на передачу меньшего объема данных (но строками) времени уходит больше!
    Пробовал использовать "встроенные" функции для обмена строками TTcpClient - тот же результат.
    Причем если расположить и сервер и клиент на одной станции, задержки нет. Можно сделать вывод,
    что проблема именно в передаче строк, а не в их обработке на клиенте или сервере.

    Не могу понять, в чем проблема?
  • Сергей М. © (20.04.09 17:58) [1]

    > записями по 289 байт


    При TVariable = record размер записи никак не может быть равным 289 байт.


    > в чем проблема?


    Без приведенного кода навскидку могу предположить, что на стороне передатчика работает агоритм Нагеля.
  • kotyara (20.04.09 18:06) [2]

    > При TVariable = record размер записи никак не может быть
    > равным 289 байт.

    На компьютер "HOST" [IP-ADDR] передано 289 байт (1 пакет(ов))


    > агоритм Нагеля

    Это что?
  • Сергей М. © (20.04.09 19:28) [3]

    > На компьютер "HOST" [IP-ADDR] передано 289 байт (1 пакет(ов))


    На заборе ХХХ написано, а за забором дрова лежат)


    > Это что?


    Ты уже погуглил, прежде чем чтокать ?
  • имя (20.04.09 20:24) [4]
    Удалено модератором
  • Сергей М. © (20.04.09 21:31) [5]

    > Rav   (20.04.09 20:24) [4]


    А ты-то кто ?)
  • FireMan_Alexey © (20.04.09 22:16) [6]

    > Сергей М. ©   (20.04.09 21:31) [5]


    Наверное тот, кто не знал, что за забором лежит :)
  • Palladin © (21.04.09 12:29) [7]

    > Сергей М. ©   (20.04.09 21:31) [5]

    это он же.
 
Конференция "Сети" » Скорость передачи строк через TTcpServer - TTcpClient
Есть новые Нет новых   [134435   +33][b:0][p:0]