PHP의 기존 응용 방식은 모두 http 기반으로 빠른 실시간 응답이 필요한 상황에는 상대적으로 취약합니다. 예를 들어 온라인 게임이나 푸시 서비스는 일반적으로 사용자와 오랫동안 TCP 연결을 유지해야 합니다. 실시간으로 정보를 응답하고 푸시하기 위해 시간을 투자합니다.
swoole은 이러한 애플리케이션 시나리오를 해결하도록 설계되었습니다. (권장 학습: o SWOOLE 비디오 튜토리얼 )
Swoole 구현
Swoole은 다른 타사 라이브러리에 의존하지 않고 순수 C로 작성되었습니다. swoole은 libevent를 사용하지 않으므로 libevent를 설치할 필요가 없습니다.swoole은 PHP의 stream/sockets/pcntl/posix/sysvmsg 및 기타 확장에 의존하지 않습니다.socket 부분
swoole은 기본 소켓 시스템을 사용합니다. 부르다.IO 이벤트 루프
메인 프로세스의 이벤트 루프는 select/poll을 사용합니다. 메인 스레드에는 파일 설명자가 몇 개 없기 때문에 그냥 select/poll을 사용하세요.리액터 스레드에서 epoll/kqueue를 사용하세요/ 작업자 프로세스작업 프로세스에는 이벤트 루프가 없으며 프로세스가 읽기 파이프를 순환하고 차단합니다. 많은 사람들이 strace -p를 사용하여 swoole 기본 프로세스를 보고 폴링 시스템 호출만 볼 수 있습니다. 이를 보는 올바른 방법은 strace -f -p
다중 프로세스/다중 스레드
다중 프로세스는 fork() 시스템 호출을 사용합니다다중 스레드는 pthread 스레드 라이브러리를 사용합니다EventFd
Swoole은 스레드/프로세스 간의 메시지 알림을 위한 메커니즘으로 eventfd를 사용합니다.Timerfd
Swoole은 타이머를 구현하기 위해 timerfd를 사용합니다.SIgnalfd
Swoole은 signalfd를 사용하여 신호 차폐 및 처리를 구현합니다. 이는 스레드/프로세스가 신호에 의해 중단되고 시스템 호출이 다시 시작되는 문제를 효과적으로 방지할 수 있습니다. 리액터 스레드는 기본 프로세스에서 어떤 신호도 수신하지 않습니다.위 내용은 Swoole은 어떤 문제를 해결했나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!