-
Нужно передать список переменных (набор строк в виде 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 - тот же результат. Причем если расположить и сервер и клиент на одной станции, задержки нет. Можно сделать вывод, что проблема именно в передаче строк, а не в их обработке на клиенте или сервере.
Не могу понять, в чем проблема?
-
> записями по 289 байт
При TVariable = record размер записи никак не может быть равным 289 байт.
> в чем проблема?
Без приведенного кода навскидку могу предположить, что на стороне передатчика работает агоритм Нагеля.
-
> При TVariable = record размер записи никак не может быть > равным 289 байт.
На компьютер "HOST" [IP-ADDR] передано 289 байт (1 пакет(ов))
> агоритм Нагеля
Это что?
-
> На компьютер "HOST" [IP-ADDR] передано 289 байт (1 пакет(ов))
На заборе ХХХ написано, а за забором дрова лежат)
> Это что?
Ты уже погуглил, прежде чем чтокать ?
-
Удалено модератором
-
> Rav (20.04.09 20:24) [4]
А ты-то кто ?)
-
> Сергей М. © (20.04.09 21:31) [5]
Наверное тот, кто не знал, что за забором лежит :)
-
> Сергей М. © (20.04.09 21:31) [5]
это он же.
|