On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 84
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 08.06.11 16:06. Заголовок: Медленное получения ответа сокета


Здравствуйте ! Нужно написать программу для получения информации с сервера.
Сервер находится на моём компьютере, в hosts добавлена строчка 127.0.0.1 update.domen.debug
Пользовался стандартной функцией из примера. Вот мой код:

 цитата:

#define CRLF Chr(13)+Chr(10)

PROCEDURE Main
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket
LOCAL nTime1 := SECONDS(), nTime2, nSeconds



// send HTTP request to server
cRequest := "GET /check HTTP/1.1" + CRLF + ;
"Host: update.domen.debug" + CRLF + ;
"User-Agent: HTTP-Test-Program" + CRLF + ;
CRLF

cResponse := SendPacket("update.domen.debug",cRequest,80)
RETURN


FUNCTION SendPacket(cURL,cRequest,nPort)
LOCAL cBuffer, cResponse, nBytes, pSocket
LOCAL nTime1, nTime2

// initialize sockets system and connect to server
INetInit()
pSocket := INetConnect( cUrl,nPort )
IF INetErrorCode( pSocket ) <> 0
? "Socket error:", INetErrorDesc( pSocket )
INetCleanUp()
QUIT
ENDIF

nBytes := INetSend( pSocket, cRequest )
cBuffer := Space(4096)
cResponse:= ""

nTime1 := SECONDS()
// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO

// disconnect and cleanup memory
? SECONDS() - nTime1
INetClose( pSocket )
INetCleanUp()

RETURN cResponse



Проблема состоит в том, что получение ответа сервера занимает целых пять с половиной секунд (5.5) !
Если я обращаюсь к этому сайту вручную, то это занимает 0.03 (30 мс) секунды.
Вот медленный код:

 цитата:

// get HTTP response from server
DO WHILE ( nBytes > 0 )
nBytes := INetRecv( pSocket, @cBuffer )
cResponse += Left( cBuffer, nBytes )
cBuffer := Space(4096)
ENDDO



В чём проблема ? Как его ускорить ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


moderator




Пост N: 223
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.11 17:38. Заголовок: SkyNET пишет: Как е..


SkyNET пишет:

 цитата:
Как его ускорить ?


Попробуй уменьшить таймаут для этого сокета

 цитата:

InetSetTimeout( pSocket, 500 )



Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 85
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 09.06.11 00:31. Заголовок: Спасибо большое ! Эт..


Спасибо большое ! Это хорошо работает, но проблема оказалось в другом.
Просто http сервер ожидает получение остальных команд и удерживает соединение открытым.
Добавление в cRequest заголовка "Connection: close" решило проблему.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 19
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет