2008/11/05 10:13
Study/Web
어느날 외부 API를 이용하여 데이터를 가져오게 돼었다.
포맷은 XML. 편하게 php 자체 함수인 simpleXML_Load_File 함수를 이용하여 사용했다.
그런데 이게 뭥미 +_____+
처음에는 잘 돼는가 했더니 외부 서버 상태에 따라 서비스에 너무 많은 영향을 끼치는 것이 아닌가 ㅠ
속도가 야~~~~ㄱ간 느려지는 것은 다반사고
가끔 중단되어 버리는 ㄷㄷㄷㄷ
그래서 timeout을 주기로 했다. 이리저리 뒤적거려 보는데 simpleXML_Load_File 에는 timeout 옵션이 없다.
다시 인터넷을 뒤적뒤적... XML 파싱 방법을 바꿀가 했지만 시간이 그리 많지 않고 한번 소켓이나 스트림을 이용하기로 결정!!
하지만 소켓이나 스트림을 거쳐 simpleXML_Load_File을 호출하기 때문에 전보다 시간이 쪼오금 더 들고 타임아웃도 잘 안 먹히는것이 아닌가 줸장 ㅠ
계속 찾다 찾다 결정한것은 Ajax!!!!
Ajax에는 readState를 통해 상태를 확인할 수 있다.
0은 초기화되지 않은 상태, 1은 로딩중, 2는 로드가 완료, 3은 사용될 준비가 되었을 때, 4는 작업이 완료된 상태.
그래서 이 상태를 이용해 보기로 했다. 호출한 후 일정시간이 지나서 상태를 확인했을 때 4가 아니라면 도중에 중단하기로.
그래서 또 뒤적뒤적거리다 abort() 라는 함수를 찾았다. 아싸~ 좋구나!!! -ㅅ- ㅋㅋㅋㅋ abort는 Ajax에서 실행하던 것을 도중에 멈추게 하는 기능을 한다.
코딩을 하기 시작.
Object.open()으로 url 및 전송 타입 등을 알려주고 Object.onreadystatechange를 이용하여 상태에 대해 변화를 감시한다.
Object.send()를 이용하여 요청을 하면 당근 상태에 변화가 생기고 완료상태(4)가 되면 결과를 받아오도록 했다.
여기서 중요한건 send()를 호출한 후 window.setTimeout()을 이용여 일정시간이 지난 후 상태를 확인하고 완료상태가 아니면 중단하도록 하는 함수를 호출하는 것이다.
요렇게...
window.setTimeout(abortSendMessage, 1000);
function abortSendMessage() {
if(Object.readyState < 4)
Object.abort();
}
생각보다 쉽다 -ㅅ-
그런데 난 해멘거다 ㅋ
요건 허접한 전체 소스 ㅋㅋㅋ
더보기
'Study > Web' 카테고리의 다른 글
| [JSON]클라이언트에서 JSON 데이터 사용하기 (0) | 2008/11/06 |
|---|---|
| [AJAX]timeout (1) | 2008/11/05 |
| [PHP] 가변변수에 대해서 (2) | 2008/10/24 |
| [JAVASCRIPT]Html에서 탭형식 내부변환하기 (2) | 2007/03/12 |