Twisted Python: максимальный размер пакета? Флеш-гнездо?

Я реализую клиент-серверное решение на основе Twisted для серверной части и, например, и Android-телефон для клиентской стороны. Поскольку эмулятор Andoird не принимает TCP-пакетов большего размера, чем 1500b (или меньше?), Мне нужно иметь возможность блокировать пакеты на стороне сервера. Не смывая гнездо после каждого «transport.write», Twisted буферизирует исходящие данные, поэтому блокировка будет бесполезной без какой-либо функции ручного или автоматического сброса / maxpacketsize. Как это сделать в Twisted? Я знаком с функцией «reactor.doSelect (1)», но поскольку я использую реактор EPoll (для обеспечения масштабируемости и производительности), я не могу использовать doSelect. Можно ли изменить maxPacketValue для определенных соединений в Twisted?

Надеясь, что кто-то может показать мне свет …

2 Solutions collect form web for “Twisted Python: максимальный размер пакета? Флеш-гнездо?”

TCP-пакеты автоматически блокируются ОС, все, что может сделать приложение, – это давать подсказки, когда нужно скрывать. Кроме того, приложение может просто читать и писать в поток.

ОС двух сообщающихся одноранговых узлов автоматически настроят максимальные размеры пакетов на основе MTU на ссылках с обнаружением пути MTU . Убедитесь, что вы не блокируете ICMP-пакеты, чтобы заставить их работать.

Поскольку крайне маловероятно, что неправильная MTU является проблемой (и MTU 1500 или менее часто задается так или иначе), вы должны повторно диагностировать свою проблему, например, с помощью трассировщика пакетов, такого как wirehark .

TCP – это протокол, ориентированный на поток, а не пакетно-ориентированный протокол. Когда вы вызываете transport.write , эти данные присоединяются к потоку TCP и могут быть отправлены в любом количестве пакетов; он может быть разбит или склеен вместе со следующим или предыдущим вызовом для write . Это довольно часто задаваемый вопрос о Twisted , но все, кто спрашивает, спрашивают его несколько иначе.

Вы хотите использовать набор для построения протокола, такой как AMP или, в основном, LineReceiver , чтобы разграничить сообщения в вашем протоколе, а не полагаться на случайный характер границ пакетов.

  • Twisted transport.write
  • Как установить временную метку параметра tcp при создании пакета tcp SYN с использованием python?
  • TCP-сервер / клиент: Сломанная труба
  • Использование pynids на нескольких pcaps
  • Извлечение полученных данных в сокет tcp в Python
  • Каково фактическое воздействие вызова socket.recv с bufsize, который не является силой 2?
  • Измерение задержки ping сервера - Python
  • данные сокетов процесса, которые заканчиваются разрывом строки
  • Как проверить, получены ли все данные с помощью Socket Socket в Python
  • Почему это соединение сокета разрешает только 1 отправку и получение?
  • Декодирование tcp-пакетов с использованием python
  • Python - лучший язык программирования в мире.