2014-10-01 5 views
0

나는 웹 응용 프로그램을 만든 나는 그것을 내 자신의 API를 추가 :내 webapp에서 내 웹 API를 쿼리하는 방법은 무엇입니까?

/api/v1.0/articles/new/{since} 

이 API는 {since} 유닉스 타임 스탬프입니다 {since}, 이후 새로운 기사의 JSON을 반환합니다.

사이트에 자동 업데이트를 추가하고 사용자가 사이트에있는 동안 기사를 자동으로 쿼리하고 싶지만 그 방법을 잘 모릅니다.

나는 다음과 같은 자바 스크립트를 사용하여 생각 해요 (jQuery를이) 그것을 할 수 있습니다 :

setInterval(function() { 
    $.get('/api/v1.0/articles/new/{since}', function (data) { 
     /* parse data, add new articles to page */ 
     /* since = now */ 
    }); 
}, 30*1000) 

이 올바른 해결책이 될 것인가? 500 명이 내 사이트를 방문하면 30 초마다 500 건의 요청이 발생하여 내 서버가 죽을 수 있습니다.

다른 가능한 해결책은 무엇입니까? 뭔가 새로운 뭔가가있을 때 서버가 webapp에 데이터를 밀어 넣을 수있는 방법이 있나요? (이것이 혜성 아약스입니까?)

+0

api를 읽는 캐시를 작성하십시오. 사용자 (모두 500 명)에게 1 캐시 파일을 읽도록 보냅니다. – briansol

답변

1

500 명의 사용자와 함께 30 초 폴링을 수행하면 평균 약 17 건의 요청을 처리하게됩니다. 그것이 서버를 죽일 지 여부는 각 요청에서 무엇을하고 있는지, 다른 요청은 무엇인지, 어떤 하드웨어가 서버에서 실행 중인지 등에 따라 다릅니다. 각 요청에서 수행하는 작업이 테이블에 대한 간단한 데이터베이스 쿼리 인 경우 - timestamp에 의해 자주 색인됩니다 - 초당 17 요청은 꽤 가볍습니다. 그러나, 내 생각에 당신은 정말로 서버 푸시의 어떤 형태를 구현해야한다 - 당신이 "혜성 아약스"라고 부르는 것. API 호출 중 하나라도 30 초 이상 걸리면 이전 API 호출이 끝나기 전에 다른 API 호출을 수행하여 잠재적으로 "스노우 볼"효과를 유발할 수 있습니다.

정확하게 서버 푸시를 수행하는 방법은 서버 스택에서 사용할 수있는 기능과 클라이언트 브라우저에서 지원할 것으로 기대되는 사항에 따라 다릅니다. 예를 들어, Node.js을 실행하는 경우 socket.io 패키지를 사용하여 웹 소켓을 사용하여 서버 푸시를 수행 할 수 있습니다. 그러나 이전 버전의 브라우저는 웹 소켓을 지원하지 않으며 웹 소켓의 모든 브라우저 구현이 동일하지 않으므로 AJAX long-polling 또는 멀티 파트 문서 스트리밍을 기반으로 한 접근 방식을 고려해야 할 수도 있습니다. 일반적으로 각 클라이언트 연결에 가장 적합한 접근 방식을 투명하게 결정하는 몇 가지 솔루션이 있지만 사용하는 접근 방식을 지원하려면 서버에 코드 또는 패키지를 설치해야합니다. 예를 들어, SignalR이 작업을 수행하지만 Microsoft/.NET 스택의 경우입니다.

다음 기술 자료를 시작으로 읽은 다음 특정 기술 스택을 기반으로보다 구체적인 질문을 게시 할 수 있습니다. 어떤 브라우저를 지원해야하는지에 대한 귀하의 가정.

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

+0

가장 우수한 답변입니다. 감사합니다! – bodacydo