2012-01-11 3 views
0

У меня есть связь клиент-сервер в Python. Если я отправляю 10 МБ данных с сервера клиенту в одном пакете, клиент может обрабатывать эти большие данные в одном пакете? Что делать, если клиент считывает данные через 1 минуту. Например, я устанавливаю соединение и отправляю сообщение 10 МБ клиенту, но клиент способен получать сообщение только через 1 минуту больше. Насколько велик буфер TCP? Возможно ли потерять данные (переполнение буфера). Будет ли он повесить сервер?TCP-сокет поведенческий в python

time.sleep(60) 
self.request.recv(20480) 

ответ

3

TCP ориентирован на поток, а не на пакетную ориентацию, поэтому нет смысла говорить о «одном пакете» в TCP. Хотя данные фактически будут отправляться в виде IP-пакетов дальше по сетевому стеку, уровень TCP гарантирует, что вы не сможете определить, как данные разбиваются на пакеты и повторно собираются на принимающей стороне.

Размер буфера TCP не указан в стандарте, но если сервер не считывает из сокета, когда буфер на стороне сервера заполнен, клиент прекратит отправку. Другими словами, TCP управляет потоком. В этом случае вы можете повесить клиента.


Что вы должны сделать, это постоянно посылать куски какой-то управляемый размер (скажем 8k) от клиента, и постоянно читал на сервере. Данные должны быть буферизованы на стороне сервера в вашей программе, если вам это нужно. Как я уже сказал, TCP не обрабатывает пакеты.

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