Почему вебсервер получает только часть из многочисленных отправленных GET запросов через сокеты?
Здравствуйте, я отправляю много GET запросов, используя один socket на C. Проблема в том, что сервер получает только малую часть. Но если я буду каждый раз открывать, отправлять запрос и потом закрывать сокет, то все окей. Флаг TCP_NODELAY не помог. Использую SOCK_STREAM.
До сервера доходят все запросы, но он как будто не видит большую часть если я подряд много отправляю. Но если я перед отправкой запроса читаю весь входящий буфер то все окей. Вся отправка проходит внутри одного потока на одно соединение сокета.
Вообще говоря, данные, переданные в рамках одной TCP-сессии, пропадать не должны никуда. Если Вы соберете дамп траффика или же замените веб-сервер на netcat, пишущий в файл, то Вы должны увидеть все свои запросы.
А Вы уверены, что на стороне веб-сервера их вообще успевают корректно обработать?
До сервера доходят все запросы, но он как будто не видит большую часть если я подряд много отправляю. Но если я перед отправкой запроса читай весь входящий буфер то все окей.
Т.е. каждому потоку выдается своя куча пакетов? Вот поэтому они не могу их обработать сразу все, т.к. требуется время на прием данных. Надо просто организовать очередь: сделать пул потоков, который будет только принимать входящие блоки данных и после приема помещать их в очередь на обработку, а рабочие потоки должны брать из этой очереди блоки и обрабатывать их. Как-то так.
каждый поток управляет только один сокетом, каждый сокет это абсолютно разные сервера. Проблема появляется не на исходящей стороне, а на входящей, пакеты уходят, а сервер на который они приходят как будто часть отфильтровывает. Но если в потоке каждый раз ждать ответа с сервера на каждый пакет и только потом отправлять новый пакет то все нормально, ощущение что сервер не может обрабатывать с такой скоростью пакеты, но тестировалось на разных серверах и все одинаково плохо отвечали.