2014-02-14 5 views
3

간단한 폴링 시스템을 사용하려고합니다. (예, 이 아닙니다.은 기성품 인 scipt를 사용하고 싶지 않습니다. 배우고 싶습니다.) result.end();을 호출하지 않고 클라이언트에 쉽게 데이터를 다시 파이프하거나 쓸 수있는 노드 서버를 사용하고 있습니다. 이 클라이언트 측은 어떻게해야합니까? 나는 더 나은 브라우저가 빠르고 쉽게 websocket을 사용하기 때문에 ie < = 9를 사용하는 사용자를위한 단순하고 실제로 좋은 대체물로 이것을 원한다.jQuery없이 간단한 XHR long 폴링

짧은 질문 짧은 : jQuery 또는 다른 프레임 워크없이 일반 JS에서 긴 폴링하는 방법? (또는 긴 폴링보다 더 좋은 방법이 있습니다).

답변

1

다음 정보는 무엇입니까?

var xhr = new XMLHttpRequest(); 
    xhr.responseType = 'blob';//or 'text', 'json', ect. there are other types. 
    xhr.timeout = 60000;//milliseconds until timeout fires. (1 minute) 
    xhr.onload = function(e2){ 
    var blob = xhr.response; 
    //handle response data 
    } 
    xhr.ontimeout = function(){ 
    //if you get this you probably should try to make the connection again. 
    //the browser should've killed the connection. 
    } 
    xhr.open('GET', "/path/to/URL.cmd?param1=val1&param2=val2", true); 
    xhr.send(); 

은 내가 timeout 속성이 더 많은 것을 위해, 긴 여론 조사가 작동하게하는 열쇠라고 생각합니다 참조 spec 같은 문서의 responseType 년대에 대한 자세한 내용이 있습니다. timeout을 지정하지 않으면 기본값은 0입니다.

+0

이것은 이미 읽은 것처럼 응답이지만, xhr.send (데이터)를 여러 번 호출하는 것처럼 내 앱에 데이터가 준비되어있을 때 xhr을 통해 데이터를 보낼 수있는 방법을 알고 싶습니다. 아니면 불가능한가요? (따라서 새로운 xhr을 열어야 할 때마다 데이터가 있거나 데이터 대기열에 대기 x 초가 소요됩니다). 그래서 여러 번 호출하고 .write를 호출 할 수있는 노드 에서처럼 .end – MarijnS95

+0

아마도, 나는 그것에 대해 약간의 생각을 해왔습니다. 나는 이걸 가지고 놀아 본 적이 없지만'(xhr.readyState == 3)'라는 부분적인 상태가있다. 나는 브라우저 구현에 대해서 많이 모른다. 거기에는 ReadyState 상태가 될 때까지 부분 데이터가 포함될 수있는 [응답하는 본문이라고하는 arrayBuffer] (http://www.w3.org/TR/2014/WD-XMLHttpRequest-20140130/#response-entity-body)가 있습니다. 수행. 서버에서 .write 호출을 여러 번 수행하여 부분 세그먼트에서 읽고 처리 할 수 ​​있습니다. 당신은 timeout ms를 늘릴 수 있습니다. 동일한 요청을'ontimeout' 호출 할 수 있습니다. –

+0

XHR이 열려있을 때 (이미 양쪽 끝이 닫혀 있거나 끝날 때), 이미 가능합니다. * .write를 여러 번 호출 할 수 있습니다. * 서버 **,하지만 내 질문은, 어떻게 ** 클라이언트 **에서 그런 일을해야합니다. – MarijnS95