Как мне повысить приоритет TCP-пакета в Delphi? - PullRequest
3 голосов
/ 22 марта 2012

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

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

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

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

РЕДАКТИРОВАТЬ

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

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

Этомотивация, стоящая за моим вопросоми Delphi 2010 (14.0.3593.25826) .

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

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

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

0 голосов
/ 23 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...