Необходимо пересылать параллельно несколько разных сообщений через HTTP на сервер.
На сервере работает ASP скрипт который обрабатывает поступающие сообщения и выдает ответ через произвольный промежуток времени. Промежуток может колебаться от нескольких секунд до минуты и более.
Клиент, который посылает сообщения выполнен в виде сервиса. Для пересылки я воспользовался интренетовскими ф-ями из набора WinInet API.
Для отправки каждого сообщения создается своя нить и в ней вызывается HTTPSendRequest.
Работа идет по след. схеме: InternetOpen/InternetConnect/HTTPOpenRequest
Потом в каждой нити: HTTPSendRequest/InternetReadFile (для чтения ответа)
Причем для каждого сообщения создается свое соединение ,т.е. каждый раз вызывается InternetConnect/HTTPOpenRequest
Главная проблема: Сообщения отсылаются на сервер последовательно. Т.е.Wininet.dll блокирует вызовы других нитей, если в данный момент уже обрабатывается запрос от какой-либо нити.
Таким образом, отсылается HTTPSendRequest, происходит возврат из него, далее вызывается InternetReadFile который подвисает т.к. ждет реакции от ASP (несколько секунд), но в это время также подвисают вызовы HTTPSendRequest от других нитей, пока не будет вызван InternetCloseHandle для первой нити.
Что можно сделать в данной ситуации? Может нужен др. подход? Все делать на более низком уровне (через tcp/ip) или может есть какие-либо библиотеки, в которых реализована более приятная поддрежка HTTP?
Необходимость использовать HTTP вызвана простой возможностью переключиться на использование SSL.
Была сделана попытка использовать асинхронные версии инетовских функций. Т.е. HTTPSendRequestEx, HTTPEndRequest и InternetQueryDataAvailable, плюс callback функция.
Соединение происходит успешно, но реакция сервера не читается как следует: иногда читается но не всё, иногда вообще вылетает исключение изнтури Wininet.dll.
И как же вообще работает браузер, в таком случае?..