비동기 프로 그래 밍 솔 루 션 - 이벤트 게시 / 구독 모드

2234 단어
사건 대열 을 이용 하여 눈사태 문 제 를 해결 하 다.
눈사태 문제 란 높 은 방 문 량, 큰 병발 량 의 상황 에서 캐 시가 효력 을 잃 는 상황 이다. 이때 대량의 요청 이 동시에 데이터 베이스 에 몰 려 들 면 데이터 베 이 스 는 이렇게 큰 조회 요 구 를 동시에 감당 하지 못 하고 사이트 의 전체적인 응답 속도 에 영향 을 미친다 ().
아 날로 그 데이터베이스 조회
var num = 0;
var select = function (callback) {
    setTimeout(function() {
        num++;
        callback("test");
    },2000)
}

select(function(res) {
    console.log(res+1);
});

select(function(res) {
    console.log(res+2);
});

select(function(res) {
    console.log(res+3);
});

setTimeout(function() {
   console.log(num);
},5000);
/*   
test1
test2
test3
3
*/

이 코드 는 사이트 가 시작 되 었 을 때 캐 시가 존재 하지 않 는 것 을 모 의 했 습 니 다. 같은 sql (검색 은 test) 이 여러 번 실 행 됩 니 다.
접근 횟수 를 제한 하기 위해 상태 코드 를 증가 합 니 다.
num = 0;
var status = "ready";
var select = function(callback){
    if (status === 'ready') {
        status = "pending";
        setTimeout(function() {
            num++;
            status = "ready";
            callback("test");
        })
    }
}

select(function(res) {
    console.log(res+1);
});

select(function(res) {
    console.log(res+2);
});

select(function(res) {
    console.log(res+3);
});

setTimeout(function() {
   console.log(num);
},5000);

/*   
 test1
 1
 */

이때 조회 횟수 는 1 회로 제한 되 었 지만 여러 번 selection 문 구 는 첫 번 째 로 만 유효 합 니 다.
이벤트 큐 도입
num = 0;
var events = require('events');
var proxy = new events.EventEmitter();
var status = "ready";
var select = function(callback){
    proxy.once("selected", callback);
    if (status === 'ready') {
        status = "pending";
        setTimeout(function() {
            num++;
            status = "ready";
            proxy.emit("selected","test");
        })
    }
}

select(function(res) {
    console.log(res+1);
});

select(function(res) {
    console.log(res+2);
});

select(function(res) {
    console.log(res+3);
});

setTimeout(function() {
   console.log(num);
},5000);

/*   
 test1
 test2
 test3
 1
 */

이때 모든 selection 문 구 는 조회 가 되 돌아 오 는 데 이 터 를 얻 었 고 조회 횟수 는 1 이 며 우리 가 기대 하 는 더 많은 상세 한 설명 을 얻 었 습 니 다.http://www.paradeto.com

좋은 웹페이지 즐겨찾기