>  기사  >  백엔드 개발  >  메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달합니다.

메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달합니다.

WBOY
WBOY앞으로
2024-02-09 23:30:09606검색

메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달합니다.

PHP에서 코루틴은 코드 실행 효율성을 향상시킬 수 있는 강력한 프로그래밍 도구입니다. 코루틴에서는 메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달하는 것이 일반적인 작업입니다. 이러한 방식으로 서브루틴에서 메인 코루틴의 컨텍스트 데이터에 액세스하여 데이터 공유 및 전송을 실현할 수 있습니다. 이 프로세스는 PHP에서 매우 간단하며, 항복 키워드만 사용하면 됩니다. 이 글에서는 메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달하는 방법을 자세히 소개하고 이 기능을 더 잘 이해하고 적용하는 데 도움이 되는 몇 가지 예제 코드를 제공합니다.

질문 내용

골랭 API 엔드포인트와 관련 컨텍스트가 있습니다.

엔드포인트는 뒤에서 무거운 작업을 수행해야 하므로 메인 엔드포인트 내부에 새 서브루틴을 생성하고 응답 자체를 반환합니다.

컨텍스트 취소를 처리하기 위해 배경 컨텍스트를 생성하고 이를 새 컨텍스트로 서브루틴에 전달했습니다.

문제는 이렇게 하면 백그라운드 서브루틴을 실행할 수 있지만 요청 ID, 스팬 ID 등과 같은 기본 컨텍스트의 값(대부분 내가 모르는 키)이 사용된다는 것입니다. 추적이 손실됩니다.

클라이언트에 응답이 전송된 후에도 실행을 취소하지 않고 상위 컨텍스트를 하위 루틴에 전달하는 방법입니다.

편집

컨텍스트에 어떤 값도 전달하지 않습니다. 하지만 처음에는 추적에 필요한 요청 ID, 범위 ID 등을 전달합니다. 이 정보는 모두 맥락에 따른 것입니다. 이것은 내부 라이브러리이고 컨텍스트는 우리가 이를 저장하는 곳입니다.

이것은 컨텍스트를 사용하여 값을 전달하는 안티 패턴이라는 것을 알고 있습니다. 비즈니스 로직이 아닌 라이브러리에 중요한 요청 ID 및 기타 값을 제외하고는 어떤 값도 전달되지 않습니다.

해결 방법

취소할 때 상위 컨텍스트를 제거하면 파생된 모든 컨텍스트도 취소됩니다. 따라서 요청 핸들러에 의해 생성된 고루틴에 대한 새 컨텍스트를 생성하는 것이 옳습니다.

새 컨텍스트를 생성할 때 원래 컨텍스트에서 관심 있는 모든 값을 새 컨텍스트에 복사해야 합니다. 그런데 열쇠를 다 모른다고 하더군요. 따라서 해당 값을 쿼리할 수 있도록 상위 컨텍스트에 대한 참조를 계속 유지할 수 있습니다. 다음과 같은 것:

으아아아

이것은 취소된 상위 컨텍스트에서 값을 조회하는 context.background()에서 새 컨텍스트를 생성합니다.

핸들러에서 생성된 고루틴에 대한 컨텍스트로 newcontext를 전달합니다.

위 내용은 메인 코루틴 컨텍스트의 복사본을 서브루틴 컨텍스트에 전달합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제