workerman 개발자가 반드시 알아야 할 몇 가지 문제

1. Windows 환경의 제한

Windows 시스템에서 Workerman은 단일 프로세스에 대해 200개 이상의 연결만 지원합니다.
Windows 시스템에서는 count 매개변수를 사용하여 다중 프로세스를 설정할 수 없습니다.
Windows 시스템에서는 status, stop, reload, restart 등의 명령을 사용할 수 없습니다.
Windows 시스템에서는 데몬 프로세스를 사용할 수 없으며, cmd 창을 닫으면 서비스가 종료됩니다.
Windows 시스템에서는 하나의 파일에 여러 리스너를 초기화할 수 없습니다.
Linux 시스템은 위의 제한이 없으며, 정식 환경에서는 Linux 시스템을 사용하는 것을 권장하고, 개발 환경에서는 Windows 시스템을 선택할 수 있습니다.

2. Workerman은 Apache 또는 Nginx에 의존하지 않습니다

Workerman 자체가 Apache/Nginx와 유사한 컨테이너입니다. 단지 PHP 환경이 준비되면 Workerman이 실행될 수 있습니다.

3. Workerman은 명령줄에서 시작됩니다

시작 방식은 Apache를 사용하는 명령어와 유사합니다 (일반 웹 호스팅에서는 Workerman을 사용할 수 없습니다).
시작 화면은 아래와 비슷합니다.

4. 장기 연결에는 반드시 하트비트가 필요합니다

장기 연결에는 반드시 하트비트가 필요합니다. 장기 연결에는 반드시 하트비트가 필요합니다. 장기 연결에는 반드시 하트비트가 필요합니다. 중요한 사항이므로 세 번 반복합니다.
장기 연결이 장시간 통신하지 않으면 라우터 노드에서 정리되어 연결이 종료됩니다.
Workerman 하트비트 설명, GatewayWorker 하트비트 설명

5. 클라이언트와 서버 프로토콜이 반드시 일치해야 통신할 수 있습니다

이것은 개발자에게 매우 일반적인 문제입니다. 예를 들어, 클라이언트가 WebSocket 프로토콜을 사용하면 서버도 WebSocket 프로토콜 (서버 new Worker('websocket://0.0.0.0...'))을 사용해야 연결되고 통신할 수 있습니다.
웹 브라우저 주소 표시줄에서 WebSocket 프로토콜 포트에 접근하려고 하지 마십시오. 원시 TCP 프로토콜 포트를 WebSocket 프로토콜로 접근하려고 하지 마십시오. 프로토콜은 반드시 일치해야 합니다.

여기서의 원리는 만약 당신이 영국인과 소통하고자 한다면 영어를 사용해야 한다는 것입니다. 일본인과 소통하고자 한다면 일본어를 사용해야 합니다. 여기서의 언어는 통신 프로토콜과 비슷하며, 양측 (클라이언트와 서버)은 동일한 언어를 사용해야만 소통이 가능합니다. 그렇지 않으면 통신이 이루어질 수 없습니다.

6. 연결 실패의 가능한 원인

Workerman을 처음 사용할 때 클라이언트가 서버에 연결 실패하는 것은 매우 일반적인 문제입니다. 일반적인 원인은 다음과 같습니다:

  1. 서버 방화벽 (클라우드 서버 보안 그룹 포함)이 연결을 차단함 (50% 확률)
  2. 클라이언트와 서버의 프로토콜이 일치하지 않음 (30% 확률)
  3. IP 또는 포트가 잘못 입력됨 (15% 확률)
  4. 서버가 시작되지 않음

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을 사용하여 장기 연결 애플리케이션을 개발합니다. 예를 들어, 즉시 통신, 사물인터넷 등, 장기 연결 애플리케이션은 GatewayWorker 프레임워크를 직접 사용하는 것이 좋습니다. 이는 Workerman을 기반으로 다시 포장되어 장기 연결 애플리케이션의 백엔드를 더 쉽게 만들고 사용하기 쉽습니다.

12. 더 높은 동시 성능 지원
비즈니스 동시 연결 수가 1000을 초과하여 동시에 온라인 상태라면 반드시 Linux 커널을 최적화하고, event 확장을 설치해야 합니다.