비동기 성능 극대화: 비차단 I/O를 위한 ReactPHP 이벤트 루프를 통해 Guzzle 7의 모든 기능을 활용하세요.
P粉043566314
P粉043566314 2024-02-17 14:29:49
0
1
634

저는 DiscordPHP 봇을 가지고 있고 쿠키가 필요한 일부 웹페이지를 다운로드하려고 합니다. ReactPHP http 브라우저는 쿠키를 지원하지 않기 때문에 Guzzle과 함께 컬 핸들러를 사용해야 할 것 같습니다.

저는 다음과 같은 최소한의 스크립트를 만들었습니다:

으아악

이 코드는 addPeriodicTimer 来检查挂起并手动调用 tick() 코드를 추가하지 않고도 즉시 종료됩니다.

으아악

타이머를 사용하면 예상대로 작동합니다.

으아악

tick() 사용에 대한 아이디어는 github.com에 있는 73개의 댓글로 마감된 스레드에서 나왔습니다.

비슷한 질문이 몇 가지 있지만 이 문제를 해결하는 질문은 없는 것 같습니다.

  • Guzzle 7 프록시를 사용하여 비동기 요청 만들기, 응답을 기다리지 않고 Guzzle을 사용하여 비동기 요청 보내기, guzzle 약속 대신 Guzzle 풀 사용 및 ReactPHP에서 한 번에 여러 요청을 보내는 방법은 무엇입니까? 모두 사용wait() 차단전화입니다.
  • ReactPHP는 sleep() 调用,ReactPHP 真的是异步的吗?执行一个长 for 루프를 사용한 동기 실행을 약속합니다. 둘 다 루프를 차단합니다.
  • 병렬 요청의 경우 Guzzle, ReactPHP 및 Amphp는 물론 Guzzle 및 React Promise도 Guzzle의 이전 버전을 사용하거나 Guzzle 7에서 제대로 작동하지 않는 더 이상 사용되지 않는 코드를 사용하면 무한 루프가 발생합니다.

쿠키 jar를 사용하여 HTTP GET을 시작하고 차단 호출(예: ->wait() 또는 수동 GET 并在 ReactPHP 事件循环中获取响应,而不使用阻塞调用(例如 ->wait() 或手动 tick()ing 컬을 사용하지 않고 ReactPHP 이벤트 루프에서 응답을 얻는 방법)

P粉043566314
P粉043566314

모든 응답(1)
P粉384366923

글쎄요, ReactPHP는 쿠키를 자동으로 설정하지 않습니다. 이미 이 주제를 논의하는 티켓이 있습니다: https://github.com/reactphp/http/issues/445. 하지만 여전히 HTTP 쿠키 헤더를 수동으로 설정할 수 있습니다.

Guzzle이 ReactPHP의 이벤트 루프를 차단하기 때문에 Guzzle과 함께 ReactPHP를 사용하면 작동하지 않는다는 점도 언급할 가치가 있습니다. 즉, 여러 요청을 보낼 수 있지만 비동기적으로 다른 작업을 수행할 수는 없습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿