동시 비동기 요청-필요한 시간 초과를 추적

파비안 루즈

Nominatim 요청으로 모든 요청 사이에 1500ms의 시간 초과를 유지해야합니다. 여러 동시 실행 프로세스가 해당 기능에서 계속 실행되는 경우 어떻게 처리합니까?

암호:

osmService :

export const getLocation = async (zipCode, street) => {
  if (!zipCode) {
    return {
      address: null,
      cacheHit: false,
    };
  }

  const cacheData = await getAddress(zipCode, street);

  if (cacheData && cacheData.length === 1) {
    return { address: cacheData[0].address, cacheHit: true };
  } if (cacheData && cacheData.length > 1) {
    logger.error('Found multiple address, this should not be', zipCode + street);
  }


  try {
    const responseObj = await getNominatimLocation(zipCode, street);
    if (responseObj) {
      const returnObj = {
        ...responseObj.address,
        lat: responseObj.lat,
        lon: responseObj.lon,
        displayName: responseObj.display_name,
      };
      await insertAddress(zipCode, street, null, returnObj);
      return {
        address: returnObj,
        cacheHit: false,
      };
    }
    return {
      address: null,
      cacheHit: false,
    };
  } catch (ex) {
    logger.error(`Error getting location from ${zipCode} ${street}`, ex);
  }
  return {
    address: null,
    cacheHit: false,
  };
};

보시다시피 사이에 캐싱 레이어가 있습니다. 따라서 요청이 캐시에 맞았을 때 1500ms를 기다릴 필요가 없습니다.

export const getNominatimLocation = async (zipCode, street, query, retries = 0) => {
  if (retries > 5) {
    return null;
  }
  try {
    const qs = {
      format: 'json',
      q: query,
      postalcode: zipCode,
      addressdetails: 1,
      country: 'Deutschland',
      street,
      'accept-language': 'de',
    };
    const response = await requestPromise()
      .get({
        url: OSM_SEARCH,
        qs,
        timeout: 12000,
        headers: {
          'User-Agent': 'xxxxxxx',
        },
      });
    return JSON.parse(response)[0];
  } catch (ex) {
    logger.info(`Nominatim timed out - retry ${retries}`, ex);
    await timeout(9000);
    return await getNominatimLocation(zipCode, street, query, retries + 1);
  }
};

Nominatim이 종종 시간 초과되기 때문에이 재귀 호출을 수행해야합니다 (재귀적일 필요는 없습니다-더 쉬웠습니다).

이제 위치를 얻고 자하는 다음 작업 (백엔드 엔진)이 있다고 가정 해 보겠습니다.

const jobA = asnyc () => {
  const {address, cacheHit} = await getLocation(10243);
  if(!cacheHit){
    await timeout(1500)
  }
}

const jobB = asnyc () => {
  const {address, cacheHit} = await getLocation(10245);
  if(!cacheHit){
    await timeout(1500)
  }
}

const startJobs = async () => {
 Promise.all([jobA(),jobB()])
 console.log('all jobs done');
}

작업은 부분적으로 내 현재 코드 구조를 나타냅니다. 내 코드에서 작업은 더 많은 작업을 수행합니다 (다른 서비스 호출 등).

이제이 레이아웃을 가지고있을 때-cacheHit이 없을 때 모든 Nominatim 호출 사이에 1500ms를 유지하려면 어떻게해야합니까?

조나스 윌 름스

1.5 초마다 잠금 해제되는 잠금을 사용할 수 있습니다.

 let lock = Promise.resolve();
 let aquireLock = () => (lock = lock.then(() => new Promise(res => setTimeout(res, 1500))));

그때

await aquireLock();
// will only run every 1.5 seconds

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Pywps 시간 초과 긴 프로세스 (비동기 요청)

분류에서Dev

Lightsail 도메인이 시간 초과를 요청하지만 IP는 정상적으로 작동합니다.

분류에서Dev

동일한 브라우저에서 동시 요청 시간 초과

분류에서Dev

NSURLRequest 요청 시간 초과

분류에서Dev

요청을 보내는 동안 세션 내 시간 초과

분류에서Dev

장기 실행 요청에 대한 NestJS REST API 시간 초과

분류에서Dev

특정 패킷 크기에 대한 Ping 요청 시간 초과

분류에서Dev

특정 패킷 크기에 대한 Ping 요청 시간 초과

분류에서Dev

ECS Fargate에서 간헐적 인 HTTP 요청 제한 시간 초과

분류에서Dev

실제로 요청이 서버에서 성공적으로 처리되는 동안 시간 초과 된 http 요청 처리

분류에서Dev

실제로 요청이 서버에서 성공적으로 처리되는 동안 시간 초과 된 http 요청 처리

분류에서Dev

Windows 서비스 시간 초과의 Ftp 요청

분류에서Dev

Java WebService 요청 시간 초과

분류에서Dev

Web Api 요청 시간 초과?

분류에서Dev

Python 요청 예외 시간 초과

분류에서Dev

ionic http 요청 로딩 시간 초과

분류에서Dev

HTTPS 요청 연결 시간 초과 (NGINX)

분류에서Dev

node.js 요청 시간 초과

분류에서Dev

NodeJS / MongoDB POST 요청 시간 초과

분류에서Dev

Sabre 동시 요청 제한

분류에서Dev

어떻게 동기 추상적 인 비동기 HTTP 요청에

분류에서Dev

시간 초과 후 완료된 aiohttp 병렬 요청 받기

분류에서Dev

BT 페어링 요청 기본 시간 초과?

분류에서Dev

requests 및 concurrent.futures를 사용하여 비동기 적으로 여러 API 게시 요청 보내기

분류에서Dev

데이터를 반환하기 전에 오디오 파일에 대한 서버 요청이 시간 초과 됨

분류에서Dev

408 Github API를 요청하는 NodeJS 앱의 시간 초과

분류에서Dev

nslookup이 "DNS 요청 시간 초과"를 반환하는 이유

분류에서Dev

AWS에서 서버를 ping 할 때 시간 초과 요청

분류에서Dev

다중 처리 : 동시 HTTP 비동기 요청에 대한 CPU 사용량 최적화

Related 관련 기사

  1. 1

    Pywps 시간 초과 긴 프로세스 (비동기 요청)

  2. 2

    Lightsail 도메인이 시간 초과를 요청하지만 IP는 정상적으로 작동합니다.

  3. 3

    동일한 브라우저에서 동시 요청 시간 초과

  4. 4

    NSURLRequest 요청 시간 초과

  5. 5

    요청을 보내는 동안 세션 내 시간 초과

  6. 6

    장기 실행 요청에 대한 NestJS REST API 시간 초과

  7. 7

    특정 패킷 크기에 대한 Ping 요청 시간 초과

  8. 8

    특정 패킷 크기에 대한 Ping 요청 시간 초과

  9. 9

    ECS Fargate에서 간헐적 인 HTTP 요청 제한 시간 초과

  10. 10

    실제로 요청이 서버에서 성공적으로 처리되는 동안 시간 초과 된 http 요청 처리

  11. 11

    실제로 요청이 서버에서 성공적으로 처리되는 동안 시간 초과 된 http 요청 처리

  12. 12

    Windows 서비스 시간 초과의 Ftp 요청

  13. 13

    Java WebService 요청 시간 초과

  14. 14

    Web Api 요청 시간 초과?

  15. 15

    Python 요청 예외 시간 초과

  16. 16

    ionic http 요청 로딩 시간 초과

  17. 17

    HTTPS 요청 연결 시간 초과 (NGINX)

  18. 18

    node.js 요청 시간 초과

  19. 19

    NodeJS / MongoDB POST 요청 시간 초과

  20. 20

    Sabre 동시 요청 제한

  21. 21

    어떻게 동기 추상적 인 비동기 HTTP 요청에

  22. 22

    시간 초과 후 완료된 aiohttp 병렬 요청 받기

  23. 23

    BT 페어링 요청 기본 시간 초과?

  24. 24

    requests 및 concurrent.futures를 사용하여 비동기 적으로 여러 API 게시 요청 보내기

  25. 25

    데이터를 반환하기 전에 오디오 파일에 대한 서버 요청이 시간 초과 됨

  26. 26

    408 Github API를 요청하는 NodeJS 앱의 시간 초과

  27. 27

    nslookup이 "DNS 요청 시간 초과"를 반환하는 이유

  28. 28

    AWS에서 서버를 ping 할 때 시간 초과 요청

  29. 29

    다중 처리 : 동시 HTTP 비동기 요청에 대한 CPU 사용량 최적화

뜨겁다태그

보관