workerman 개발자가 알아야할 몇 가지 주요 사항
1. 윈도우 환경 제한 사항
윈도우 시스템에서 workerman 단일 프로세스는 200개 이상의 연결만 지원합니다.
윈도우 시스템에서 count 매개변수를 사용하여 다중 프로세스를 설정할 수 없습니다.
윈도우 시스템에서 status, stop, reload, restart 등의 명령을 사용할 수 없습니다.
윈도우 시스템에서 백그라운드 프로세스를 사용할 수 없으며, cmd 창을 닫으면 서비스가 중지됩니다.
한 파일에서 여러 개의 리스너를 초기화할 수 없습니다.
리눅스 시스템에는 이러한 제한이 없으므로 운영 환경에서는 리눅스 시스템을 권장하며, 개발 환경에서는 윈도우 시스템을 선택할 수 있습니다.
2. workerman은 apache 또는 nginx에 의존하지 않습니다
workerman 자체가 apache/nginx와 유사한 컨테이너이며, PHP 환경이 정상적으로 설정되어 있다면 workerman을 실행할 수 있습니다.
3. workerman은 명령줄로 시작됩니다
workerman의 시작 방식은 apache와 유사하며, 일반적으로 웹 호스팅 공간에서는 사용할 수 없습니다. 화면은 다음과 유사합니다.
4. 장기 연결에는 항상 하트비트를 추가해야 합니다
장기 연결은 반드시 하트비트를 추가해야 합니다. 장시간 통신이 없을 경우 라우팅 노드에 의해 연결이 닫힐 수 있습니다.
workerman 하트비트 설명, gatewayWorker 하트비트 설명
5. 클라이언트와 서버 프로토콜은 꼭 일치해야 통신할 수 있습니다
이것은 개발자가 자주 접하는 문제입니다. 예를 들어 클라이언트가 웹소켓 프로토콜을 사용하는 경우, 서버는 반드시 웹소켓 프로토콜을 사용하여(new Worker('websocket://0.0.0.0...')
) 연결해야 통신할 수 있습니다.
브라우저 주소 표시줄에서 웹소켓 프로토콜 포트에 액세스하려고 시도하거나 웹소켓 프로토콜로 원시 TCP 프로토콜 포트에 액세스하려고 시도하지 마십시오. 프로토콜은 꼭 일치해야 합니다.
이는 영국인과 소통할 때 영어를 사용해야 한다는 것과 유사합니다. 일본인과 소통하려면 일본어를 사용해야 합니다. 여기서 언어는 통신 프로토콜과 유사합니다. 양측(클라이언트와 서버)은 통신하기 위해 동일한 언어를 사용해야 하며, 그렇지 않으면 통신이 불가능합니다.
6. 연결 실패의 가능한 원인
workerman을 처음 사용할 때 클라이언트가 서버에 연결하는 데 실패하는 문제는 매우 흔합니다. 일반적으로 다음과 같은 이유가 있습니다:
- 서버 방화벽(클라우드 서버 보안 그룹 포함)이 연결을 차단했습니다. (이것이 50%의 가능성입니다.)
- 클라이언트와 서버가 사용하는 프로토콜이 호환되지 않습니다. (이것이 30%의 가능성입니다.)
- IP 또는 포트가 잘못되었습니다. (이것이 15%의 가능성입니다.)
- 서버가 시작되지 않았습니다.
7. exit die sleep 문을 사용하지 말아야 합니다
업무 실행 중에 exit die 문을 사용하면 프로세스가 종료되고 WORKER EXIT UNEXPECTED 오류가 표시됩니다. 물론, 프로세스가 종료되면 즉시 새 프로세스가 다시 시작되어 서비스를 계속합니다. 반환이 필요하면 return을 호출하면 됩니다. sleep 문을 사용하면 프로세스가 잠들어 있으며, 잠들어 있는 동안 어떤 업무도 실행되지 않고 프레임워크가 중지되어 해당 프로세스의 모든 클라이언트 요청을 처리할 수 없습니다.
8. pcntl_fork 함수를 사용하지 말아야 합니다
pcntl_fork
는 동적으로 새로운 프로세스를 생성하는 데 사용되는데, 업무 코드에서 pcntl_fork
를 사용하면 주의해야 합니다. 이는 고아 프로세스를 회수할 수 없게 하여 업무에 이상을 유발할 수 있습니다. 업무에서 pcntl_fork
는 연결, 메시지, 연결 종료, 타이머 등의 이벤트 처리에 영향을 미치며 예기치 않은 예외를 유발할 수 있습니다.
9. 업무 코드에 무한 루프가 포함되어서는 안 됩니다
업무 코드에 무한 루프가 있으면 workerman 프레임워크에 제어권을 반환할 수 없어 다른 클라이언트 메시지를 수신하고 처리할 수 없습니다.
10. 코드를 변경할 때 재시작해야합니다
workerman은 메모리 상주형 프레임워크입니다. 코드를 변경하려면 workerman을 재시작해야 새 코드의 효과를 볼 수 있습니다.
11. 장기 연결 애플리케이션에는 GatewayWorker 프레임워크를 권장합니다
많은 개발자가 workerman을 사용하여 실시간 통신, 사물인터넷 등과 같은 장기 연결 애플리케이션을 개발하려고 합니다. 장기 연결 애플리케이션을 개발할 때는 workerman을 기반으로 하는 특별히 설계된 GatewayWorker 프레임워크를 직접 사용하는 것을 권장합니다. 이를 통해 백엔드에서 장기 연결 애플리케이션을 더 간단하고 사용하기 쉽게 할 수 있습니다.
12. 더 높은 동시성을 지원합니다
비즈니스 동시 연결 수가 1000을 초과하는 경우 Linux 커널을 최적화하고 event 확장을 설치할 것을 강력히 권장합니다.