2014-12-23 3 views
2

고객이 게시를 신청하면 {react : true (기본값)} 및 {reactive : false}의 두 가지 옵션을 알고 있습니다.Meteor의 반응성을 제어 할 수 있습니까?

우리가 Meteor를 사용하고 있다면 우리는 반응성을 사용하고 싶지만 때로는 업데이트가 실시간이 아니라 가까이에있을 필요가없는 경우가 있습니다. pub/sub의 간격 새로 고침 빈도는 어떻게 설정합니까?

또 다른 시나리오 : 나는 300 개의 클라이언트가 발행물에 가입하고 데이터가 변경되며 모든 클라이언트가 동시에 DDP 변경 메시지를 받는다고 가정 해 보겠습니다. 각 클라이언트 업데이트 사이에 일종의 지연을 만들 수 있습니까? 나는 CPU에 높은 부하를 원하지 않는다. 사용자는 응용 프로그램이 평소처럼 빠르게 응답하지 않는다는 것을 알게된다.

다음과 같은 질문을 할 수 있습니다. 왜이 사람이 이것을 원하니? 많은 클라이언트를 확보하기 시작하면 모든 실시간 업데이트로 인해 응용 프로그램이 빠르게 느려질 수 있습니다. 필자의 시나리오에서는 실시간 업데이트가 필요 없지만 일부는 업데이트가 필요합니다. 예 : 10 초의 재생 빈도.

+0

관찰자를 사용하는 것이 가능하고 저수준 간행물이 여러 메시지를 대기열에 추가하고 정기적 인 간격으로 청크로 보내도록 메시지를 추가/변경/제거했기 때문입니다. 비록 이것이 실제로 응용 프로그램의 확장성에 도움이 될지 모르겠지만 ... 결국 같은 양의 메시지를 보내고 있습니다. – sbking

+0

DDP 메시지를 느리게하는 방법은 아는 바로는 유성기가 sock.js를 DDP로 사용합니다. UI 업데이트의 속도를 늦추려면 로컬 컬렉션을 만들고 타이머를 사용하여 로컬 컬렉션을 서버 컬렉션과 동기화하십시오. –

답변

0

여기에 기본적인 아이디어는 (검증되지 않은 오류에 대해 죄송합니다,하지만 당신은 아이디어를 얻을)입니다 :

var CatsProxy = new Meteor.Collection('CatsProxy') 
 

 
if (Meteor.isServer) { 
 

 
    var Cats = new Meteor.Collection('Cats') // private, on server only 
 

 
    /* ... something causes Cats objects to be updated every half second ... */ 
 

 
    // outside of a reactive context: 
 
    setInterval(function() { 
 
     var cat = Cats.find({_id: 123}) 
 
     CatsProxy.update({_id: cat._id}, cat); 
 
    }, 60000) // once a minute 
 

 
    Meteor.publish("cats", function() { 
 
     return CatsProxy.find({_id: 123}); 
 
    }); 
 
} 
 

 
if (Meteor.isClient) { 
 
    Meteor.subscribe("cats"); 
 

 
    Template.cats.helpers({ 
 
     cat: function() { 
 
      // this is reactive 
 
      return CatsProxy.find({_id: 123}) 
 
     } 
 
    }) 
 
}

그리고 지금 cats 템플릿 만 업데이트 분당 대신 초당 두 번 한 번 .

+0

이 솔루션은 매우 비효율적입니다. 질문은 수집 단위가 아닌 클라이언트 기반 업데이트를 지연시키는 것입니다. 매분마다 mongodb 데이터베이스를 업데이트하는 것이 확실합니다. CatsProxy는 익명의 컬렉션이 아닙니다. 이것은 자체 DDoS 공격입니다. 쓸데없는 DDP 호출로 서버를 넘칩니다. –

+0

@ Mário 동의하지만 그럼에도 불구하고 매우 간단합니다. 또한 setInterval은 서버 (업데이트 된 응답)에서 실행되어야하고 CatsProxy 만 클라이언트에 게시되어야하므로 DDP 플러딩은 발생하지 않습니다. 마지막으로, 더 나은 답변을 제공 할 수 있다면 모든 사람들에게 도움이 될 것입니다. – trusktr

+0

적어도 업데이트 된 대답에는 단일 고양이 만 게시하고 클라이언트는 CatsProxy에 액세스하기 때문에 DDP 플러딩이 없어야합니다. * DDP 범람이 있다면 Meteor의 보안 문제로 그들이 이미 처리했다고 생각합니다. – trusktr

관련 문제