Буфер сокета TCP и переполнение данных - PullRequest
0 голосов
/ 31 августа 2011

Мое приложение выступает в качестве клиента для банковского сервера, отправляя запрос и получая ответ от этого сервера.После обработки ответа в базе данных, что занимает некоторое время, поэтому, если сервер отправляет ответ в течение 0,5 секунды, а операция дБ занимает 1 секунду, после чего только мое приложение снова пытается получить данные с сервера через метод begin receive, тогда данные должны где-то накапливаться, и еслида где это будет храниться.Будет ли какое-то ограничение, так что данные будут переполнены, и если это произойдет, будет ли закрыт этот сокет.Я объявляю размер буфера сокета равным 1024. Если у кого-то есть статья, которая проясняет мои сомнения, поделитесь ею.

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Можете ли вы контролировать, что сервер отправляет вам? В большинстве случаев, когда получатель оперирует полученными данными, отправка ACK прикладного уровня после завершения работы позволит отправителю узнать, когда отправлять следующий запрос. Это гарантирует, что данные не будут потеряны (так как TCP гарантирует, что они не будут потеряны в сети).

Если вы не можете изменить способ, которым сервер отправляет вам данные, вы можете рассмотреть возможность запуска приемника в другом потоке, где он будет сохранять каждый входящий запрос в кэш (либо только в ОЗУ, либо на HD). Затем рабочий поток (или несколько потоков) будет читать запросы из этого кэша и выполнять необходимую работу. Таким образом, вы получите полный контроль над буферизацией данных.

0 голосов
/ 01 сентября 2011

Я думаю, что вы будете читать данные порциями сами с помощью сокета - не так ли? Чем просто не читать больше, чем вы можете справиться. Отправитель должен сделать то же самое - если ваш буфер ввода переполнен, отправителю следует подождать, прежде чем отправлять больше. Но, возможно, в этом случае будет ошибка. Если это действительно большая проблема, просто начните с загрузки данных в файл на вашем диске и обработайте данные после того, как вы их получите. Я не думаю, что ваш жесткий диск будет медленнее, чем ваша сеть:)

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