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 , чтобы разграничить сообщения в вашем протоколе, а не полагаться на случайный характер границ пакетов.

  • TCP-сервер через SSL с помощью SocketServer.TCPServer
  • Python: SocketServer неожиданно закрывает TCP-соединение
  • сервер python tcp отправляет данные нескольким клиентам
  • twisted - получить выбранный пользователем порт прослушивания
  • Python. Печать MAC-адреса из 6-байтовой строки
  • Непрерывный поток данных из командной строки linux в скрипт python
  • Как закрыть соединение сокета на Ctrl-C в программе python
  • Как проверить, получены ли все данные с помощью Socket Socket в Python
  • Python - лучший язык программирования в мире.