Workerman의 특징
워커맨이 기본구성으로서 php-fpm, apache, nginx 등의 컨테이너에 의존하지 않고 독립적으로 실행될 수 있는 애플리케이션을 개발하는 데 아주 편리하게 해주는 특징이다.
2、PHP 다중 프로세스 지원
서버의 다중 CPU 성능을 최대한 이용하기 위하여 Workerman은 기본적으로 다중 프로세스 및 다중 태스크를 지원한다. Workerman은 메인 프로세스와 여러 개의 자식 프로세스를 시작하여 서비스를 제공하며, 메인 프로세스는 자식 프로세스를 모니터링하고, 자식 프로세스는 네트워크 연결을 수신하고 데이터를 수신 및 처리하기 위해 독자적으로 리스닝한다. 이러한 프로세스 모델의 간소화로 Workerman은 더욱 안정적이고 효율적이다.
3、TCP 및 UDP 지원
Workerman은 TCP 및 UDP 두 가지 전송 계층 프로토콜을 지원하며, 프로토콜을 변경하려면 속성만 변경하면 되며, 비즈니스 코드를 변경할 필요가 없다.
4、장기 연결 지원
대화방, 게임 등 PHP 응용프로그램이 클라이언트와의 장기 연결을 유지해야 하는 경우가 많은데, 전통적인 PHP 컨테이너(apache, nginx, php-fpm)는 이를 어렵게 한다. Workerman을 사용하면 서버 비즈니스가 연결을 종료하지 않는 한 PHP 장기 연결을 사용할 수 있다. Workerman 단일 프로세스는 수만 개의 동시 연결을 지원하며, 다중 프로세스는 수십만 또는 백만 개의 동시 연결을 지원한다.
5、다양한 응용 계층 프로토콜 지원
Workerman 인터페이스는 다양한 응용 계층 프로토콜을 지원하며, 사용자 정의 프로토콜을 포함하는데, Workerman에서 프로토콜을 전환하는 것 또한 매우 간단하며, 단순히 하나의 필드를 구성하기만 하면 끝나며, 비즈니스 코드는 변경하지 않아도 되며, 서로 다른 프로토콜의 포트를 여러 개 동시에 열 수 있어 다양한 클라이언트 요구를 충족시킬 수 있다.
6、고성능 지원
Workerman은 Libevent 이벤트 루프 라이브러리를 지원하며 (event 확장 기능 설치 필요), 장기 연결이 있는 고성능 환경에서 Event를 사용하여 성능이 뛰어나며, Event 확장 기능이 설치되어 있지 않으면 PHP 기본 Select 관련 시스템 호출을 사용하므로 성능 역시 매우 강력하다.
7、부드러운 서비스 다시 시작 지원
서비스를 다시 시작해야 할 경우(예를 들어 버전을 출시할 때), 사용자 요청을 처리 중인 프로세스가 즉시 종료되지 않고, 재시작하는 순간 클라이언트 통신에 실패하지 않도록 워커맨은 부드러운 서비스 다시 시작 기능을 제공하여 서비스를 부드럽게 업그레이드하며, 클라이언트의 이용에 영향을 주지 않는다.
8、파일 갱신 모니터링 및 자동로딩 지원
개발하면서 코드를 변경한 후 즉시 적용되길 바라는데, Workerman은 파일이 업데이트되면 자동으로 reload하여 새 파일을 로드하여 적용되도록 하는 FileMonitor 파일 모니터링 컴포넌트를 제공한다.
9、지정된 사용자로서 서브프로세스 실행 지원
서브프로세스가 실제 사용자 요청을 처리하므로 안전을 사실상 고려해야 하는 것인데, Workerman은 서브 프로세스를 실행하는 사용자를 설정하여 서버를 더 안전하게 만들 수 있게 지원한다.
10、객체 또는 리소스 영구 저장을 지원
Workerman은 실행 중에 한 번 PHP 파일을 로딩하고 해석한 후 메모리에 상주하여 클래스 및 함수 선언, PHP 실행 환경, 심볼 테이블 등이 반복적으로 생성과 소멸되는 웹 컨테이너에 비해 완전히 다르다. Workerman에서 프로세스의 생애주기 내에서 정적 멤버 또는 글로벌 변수는 명시적으로 파괴되지 않는 한 영구적으로 보관되며, 즉 객체나 연결과 같은 리소스를 전역 변수나 클래스 정적 멤버에 넣으면 현재 프로세스의 전체 생애주기 동안 모든 요청이 이 리소스를 재사용할 수 있다. 예를 들어 하나의 프로세스 내에서 데이터베이스 연결을 한 번 초기화하기만 하면, 이후에 이 프로세스의 모든 요청이 다시 이 데이터베이스 연결을 재사용할 수 있어, 자주 발생하는 데이터베이스 연결 과정(TCP 세션 설정, 데이터베이스 권한 확인, TCP 연결 종료와 같은)을 피할 수 있어 응용프로그램의 효율성을 크게 향상시킨다.
11、고성능을 지원
Workerman은 파일을 디스크에서 한 번 읽고 해석한 후, 다음에 사용될 때는 메모리의 Opcode를 직접 사용하여 디스크 IO 및 PHP 시작 초기화, 실행 환경 생성, 어휘 및 구문 분석, Opcode 컴파일, 요청 닫기 등 다양한 시간 소요과정들을 크게 감소시키며, 또한 nginx, apache 등의 컨테이너에 의존하지 않으므로 nginx 등의 컨테이너가 없어 원격 통신 비용이 들지 않으며, 가장 중요한 것은 자원을 영구적으로 보관할 수 있어 매번 데이터베이스 연결 등을 초기화하지 않아도 된다. 따라서 Workerman으로 애플리케이션을 개발하면 대단히 높은 성능을 얻을 수 있다.
12、HHVM 지원
HHVM 가상머신에서 실행할 수 있어, PHP 성능을 몇 배로 향상시킬 수 있다. 특히, CPU 집약적인 비즈니스에서 성능이 매우 우수하다. 실제 압력테스트 대비, 부하나 비즈니스가 없는 상태에서 HHVM에서 Workerman 동작은 Zend PHP5.6에서 네트워크 처리량이 30~80% 향상된다.