Оптимизируйте соединение TCP так же, как соединение UDP, используя Socket.IOControl - PullRequest
0 голосов
/ 12 февраля 2020

В настоящее время я использую Udp для отправки небольших изображений на мой сервер. Эта методология является быстрой, поскольку она работает как механизм «забей и забудь». Это означает, что серверу не важно, был ли получен пакет Udp, отправленный клиентом, или нет.

Я пытался использовать Tcp для того же, и Fps медленнее, чем Udp. Одна из причин заключается в том, что конечная точка Tcp на сервере всегда отправляет подтверждение обратно клиенту.

Из интереса я хотел посмотреть, смогу ли я отключить этот «обратный вызов», чтобы посмотреть, какова будет производительность сравнения.

Я перебираю сокет iocontrol , где я можно увидеть, что я могу установить настройки низкого уровня для привязки соединения. Одним из них являются значения keep alive, которые можно установить, передав параметр IOControlCode.KeepAliveValues ​​с предпочтительными для него значениями.

Я посмотрел на то, что доступно, но не смог увидеть очевидный параметр «отключить подтверждение». Я вижу AsyncIO и NonBlockingIO. Остановит ли какой-нибудь из них ответ «ack» или это будет полностью другой параметр?

1 Ответ

1 голос
/ 13 февраля 2020

Вы не можете отключить TCP ACK. Нет причины, по которой вы не можете использовать TCP для отправки полнокадрового видео (подумайте Netflix).

Вам просто нужно использовать буферы отправки и получения соответствующего размера, чтобы вы не ожидали. Вам не нужно использовать IOControl для их изменения, вы можете установить их прямо в Socket.

...