2011-03-11 3 views
0

증상 : "push_listener_concurrency"가 "broadcast"로 설정되었지만 여러 (임의의 금액)의 가입자 만 메시지를받습니다. 이런 유형의 문제를 다루는 사람이 있습니까? 테스트 케이스는 '/publisher?cid=test' 채널의 'POST'이며, '/listener?cid=test'의 'GET'은 채널 당 하나의 클라이언트 만있을 때 모든 것이 작동하는 것처럼 보입니다.NGiNX HTTP 푸시 모듈 - 방송이 임의적으로 동작합니다.

답변

1

만약 누군가가 똑같은 얼굴을 보일 경우 문제.

헤더에 문제가 있습니다. nginx http 푸시 모듈을 jQuery로 올바르게 들으려면 여기에 헤더를 올바르게 처리하는 수신기를 사용해야합니다. 내 코드는

function Listener(url, successCallback, failureCallback) { 
    var scope = this; 
    var etag = 0, lastModified = 0; 

    var launched = false; 

    var failure = false; 

    this.successTimeout = 0; 
    this.failureTimeout = 5000; 

    var getTimeout = function() { 
     return failure ? this.failureTimeout : this.successTimeout; 
    }; 

    var listen = function() { 
     $.ajax(scope.ajaxOptions); 
    } 

    var beforeSend = function (jqXHR) { 
     jqXHR.setRequestHeader("If-None-Match", etag); 
     jqXHR.setRequestHeader("If-Modified-Since", lastModified); 
    }; 

    var complete = function (jqXHR) { 
     var timeout = getTimeout(); 

     etag = jqXHR.getResponseHeader('Etag'); 
     lastModified = jqXHR.getResponseHeader('Last-Modified'); 

     var timeout = jqXHR.statusText == 'success' ? scope.successTimeout : scope.failureTimeout; 

     if (timeout > 0) { 
      setTimeout(listen, timeout); 
     } else { 
      listen(); 
     } 
    }; 

    this.ajaxOptions = { 
     url : url, 
     type : 'GET', 
     async : true, 
     error : failureCallback, 
     success : successCallback, 
     dataType : 'json', 
     complete : complete, 
     beforeSend : beforeSend, 
     timeout: 1000 * 60 * 60 * 24 
    }; 

    this.start = function (timeout) { 
     if (!launched) { 
      if (typeof(timeout) == 'undefined' || timeout == 0) { 
       listen(); 
      } else { 
       setTimeout(listen, timeout); 
      } 
      launched = true; 
     } 
    }; 
} 
입니다.