2012-03-22 3 views
3

У меня есть серверное приложение, которое получает некоторый специальный TCP-пакет от клиента и должно реагировать на него как можно скорее, отправив ACK высокого уровня клиенту (TCP ACK не будет соответствовать моим потребностям).Как увеличить приоритет TCP-пакета в Delphi?

Однако этот сервер действительно интенсивно работает в сети, и иногда пакет будет слишком длинным для отправки (например, 200 мс в локальной сети, когда простое серверное приложение может отправить его менее чем за 1 мс).

Есть ли способ отметить этот пакет с высокоприоритетным тегом или что-то в этом роде в Delphi? Или, может быть, с Win32 API?

Заранее спасибо.

EDIT

Спасибо за все ответы до сих пор. Я добавлю некоторые подробности. Мой продукт имеет следующую настройку: есть несколько устройств, которые построены на автомобилях с WIFI-связностью. Когда они прибудут в гараж, эти устройства подключаются к моему серверу и начинают передавать данные.

Из-за аппаратных ограничений я внедрил ACK высокого уровня, чтобы сообщить устройству, что последний пакет прибыл успешно (просьба не спорить об этом - данные могут быть повреждены, даже если я получил правильный TCP ACK). Однако, если я использую свое серверное программное обеспечение, которое связывается с удаленной базой данных, чтобы выдать этот ACK, я получаю очень длинную задержку (> 200 мс). Если я использую эксклюзивное программное обеспечение для выполнения этой задачи, я получаю небольшие задержки (< 1ms). Итак, я подумал, могу ли я просто сказать Windows, чтобы отправить эти специальные пакеты в первую очередь, так как кажется мне, что этот пакет задерживается, поэтому базы данных могут быть доставлены.

Это мотивация моего вопроса.

EDIT 2

В соответствии с просьбой: это устаревшее программное обеспечение, и я использую наследие dclsockets140.bpl пакет и Delphi 2010 (14.0.3593.25826).

+0

В какой библиотеке вы используете? Версия Delphi? –

+1

TCP не знает приоритетов. – Leo

+0

@Mef, делает. См. Мой ответ. – OnTheFly

ответ

2

ИМО это очень сложно реализовать. есть много оборудования и программного обеспечения. в первую очередь, если вы общаетесь между двумя разными ОС, у вас есть латентность. во-вторых, мягкие и жесткие брандмауэры, антивирусы, все фильтрует/задерживает ваш пакет.

вы можете попробовать также «взломать» систему (это связано с очень хорошими знаниями о том, как кадры/сегменты упакованы/отправлены, управление потоком, перегрузка и т. Д.), Либо изменив его из кода, либо используя некоторые инструменты, такие как http://half-open.com/ или другие.

0

Короче говоря, минус MSG_OOB флаг send функция отмечает данные как "срочный". Подробное обсуждение OOB в контексте особенностей реализации Windows Sockets доступно here.

+0

И соответствующее расширенное чтение уровня [здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa374094%28v=vs.85%29.aspx) – OnTheFly

+0

, насколько мне известно, в практика качества обслуживания осуществляется непосредственно на оборудовании (маршрутизаторы и т. д.) – RBA

+3

И на практике он не включен. Потому что никто не доверяет людям, которые включают бит. Я бы сказал, что интернет-маршрутизаторы игнорируют биты QOS, 99,99% времени. –

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