2010-12-05 2 views
0

정보가있는 응답? 매우 빠릅니다 :Rebol Raw Http Head 이유 원격 파일 크기를 정보에 비해 매우 느리게 요청 하시겠습니까? 함수

i: info? http://cdimage.ubuntu.com/daily/current/natty-alternate-i386.iso 
i/size 

http 헤드 요청으로 인해 아마도 10 배 더 시간이 걸립니다.

port: open tcp://cdimage.ubuntu.com:80 
insert port "HEAD /daily/current/natty-alternate-i386.iso HTTP/1.1 ^/" 
insert port "Host: cdimage.ubuntu.com ^/^/" 
out: copy "" 
while [data: copy port][append out data] 
block: parse out rejoin [": " newline] 
select block "Content-Length" 

답변

2

이 경우 포트 모드가 원인입니다. 대기 모드 (기본적으로 켜져 있음)로 버퍼링 된 I/O를 사용하는 곳.

http에서 클라이언트는 모든 서버 바이트를 읽었을 때 포트를 닫아야합니다.

기본적으로 TCP를 직접 사용하고 있기 때문에 삽입 포트를 사용하면 충분한 바이트가 도착할 때 요청의 끝을 감지하고 포트를 닫아야 할 책임이 있습니다. 저수준 tcp를 할 때/행 또는/no-wait에서만 수행 할 수 있습니다.

뭔가 읽고 정보가 있습니까? 너를 위해서.

하면서 데이터 : 복사 포트] 타임 아웃이 발생할 때까지

은 (REBOL에서 기본적으로 30 초하는) 종료하지 않는 [데이터를 추가].

또한, 귀하의 요청은

이 시도 ... 오류가있는 것으로 보인다

port: open/lines tcp://cdimage.ubuntu.com:80 
insert port {HEAD /daily/current/natty-alternate-i386.iso HTTP/1.0 
Accept: */* 
Connection: close 
User-Agent: REBOL View 2.7.7.3.1 
Host: cdimage.ubuntu.com 
} 
out: form copy port 
block: parse out none ;rejoin [": ^/"] 
probe select block "Content-Length:" 

여기가/라인을 추가하는 것은 대기를 방지 할 것으로 보인다. 아마도 http 스키마가 열린 상태에서 회선 모드를 처리하는 방법과 관련이 있습니다.

REBOL 포트 모드는 설명서와 인터넷에서 잘 살펴볼 수 있습니다.

trace/net을 사용했다면 수신 된 모든 패킷과 해석기가 아직 대기 중이라는 것을 알게됩니다. btw 귀하의 코드는 실제로 내 테스트에서 400 오류를 반환했습니다.

+0

정말 고맙습니다. –