백엔드 개발 PHP 튜토리얼 PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)

PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)

Sep 13, 2018 pm 05:11 PM
linux php socket

이 기사는 PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)를 제공합니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

마지막 에코 서비스 프로그램은 동시에 하나의 클라이언트에만 연결할 수 있다는 큰 단점이 있는데, 이는 명백히 불합리합니다.

그래서 이번에는 여러 클라이언트에게 동시에 서비스를 제공하기 위해 다중 프로세스 접근 방식을 사용합니다.

다음은 최종 효과입니다.

PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)

(우리가 만든 작업자 프로세스는 ps 명령을 통해 볼 수 있습니다.)

PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)

(xshell을 통해 여러 터미널을 열고 여러 터미널을 서비스 프로그램 클라이언트)

코딩을 시작하기 전에 먼저 프로세스가 무엇인지 소개하겠습니다.

프로세스, 즉 메모리를 점유하는 실행 중인 프로그램은 독립적인 메모리 공간입니다. 예를 들어 Windows에서 메모장 소프트웨어를 열 때 이 작업은 프로세스를 여는 것과 같습니다.

멀티 프로세스는 여러 프로세스를 만들어 하나의 일을 함께 완성하는 것입니다.

이번에는 서버측 프로그램만 구현하면 되며 클라이언트는 이전 프로그램을 계속 사용할 수 있습니다. 이전 기사를 읽지 않았다면 역사적인 기사를 확인해 보세요.

PHP에서는 pcntl_fork 함수를 사용하여 프로세스를 만들 수 있습니다.

다음은 함수의 프로토타입입니다.

int pcntl_fork ( void )
로그인 후 복사

공식 설명:

성공하면 생성된 자식 프로세스의 PID가 부모 프로세스 실행 스레드에 반환되고, 자식 프로세스 실행 스레드에는 0이 반환됩니다. 실패하면 상위 프로세스 컨텍스트에 -1이 반환되고 하위 프로세스가 생성되지 않으며 PHP 오류가 발생합니다.

부모 프로세스에 의해 실행되는 스레드라고 하는 이유는 프로세스에 하나 이상의 스레드가 포함되어 있고 이 스레드가 프로세스의 기본 스레드이기 때문입니다.

상위 프로세스가 pcntl_fork를 호출하면 이 하위 프로세스도 상위 프로세스와 동일한 컨텍스트를 갖습니다. 즉, 두 프로세스는 동일한 코드를 공유합니다.

코딩 프로세스 입력:

PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)

pcntl_fork 함수를 실행하면 하위 프로세스가 동시에 복사됩니다. 이때 컨텍스트가 상위 프로세스의 실행 환경인 경우 반환 값은 다음과 같습니다. 자식 프로세스의 프로세스 번호입니다. 자식 프로세스의 실행 환경이라면 0을 반환한다. 따라서 다음 if 프로그램 구조에서는 두 분기가 모두 실행됩니다.

하위 프로세스는 여전히 이전과 동일한 논리로, 클라이언트로부터 메시지를 수신하고 동시에 클라이언트에 보내는 데 사용됩니다.

두 번째 줄은 pcntl_waitpid 함수를 호출합니다. 이 함수를 설명하기 전에 먼저 좀비 프로세스가 무엇인지 이해해 보겠습니다.

일반적으로 하위 프로세스는 상위 프로세스를 통해 생성됩니다. 프로세스는 독립적인 메모리 구조이므로 상위 프로세스는 하위 프로세스의 실행 상태를 알 수 없습니다. 자식 프로세스가 작업을 완료한 후에는 스스로 종료할 수 없습니다. 이때 부모 프로세스는 자식 프로세스를 재활용하기 위해 운영 체제를 통해 자식 프로세스의 상태를 얻어야 합니다. 그렇지 않으면 우리의 자식 프로세스는 가비지 리소스, 즉 좀비 프로세스가 됩니다.

다음은 이 함수의 함수 프로토타입입니다.

int pcntl_waitpid ( int $pid , int &$status [, int $options = 0 ] )
로그인 후 복사

공식 설명:

fork의 하위 프로세스 상태를 기다리거나 반환합니다.

실제로 위 코드에 문제가 있습니다. foreach에서 처음으로 pcntl_waitpid를 호출한 후, 이때 실제로 메인 프로세스가 차단되어 첫 번째 자식 프로세스가 종료되기를 기다리며, 다른 자식 프로세스가 비정상일 경우 이때 종료하게 되면 메인 프로세스에서 재활용되지 않고 좀비 프로세스가 생성됩니다. 실제 개발에서 기본 프로세스는 여전히 다른 작업을 수행해야 합니다.

여기에서는 non-blocking 방법을 권장합니다. 세 번째 매개변수인 WNOHANG을 추가하면 됩니다. 즉, pcntl_waitpid ($pid, $status, WNOHANG)

이렇게 하면 하위 프로세스가 종료되지 않고 즉시 반환되어 후속 코드를 계속 실행할 수 있습니다.

관련 추천:

서버측 PHP 다중 프로세스 프로그래밍 실습

서버측 PHP 다중 프로세스 프로그래밍 실습_PHP 튜토리얼

위 내용은 PHPSocket 프로그래밍의 다중 프로세스 에코 서버에 대한 자세한 소개(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP : 서버 측 스크립팅 언어 소개 PHP : 서버 측 스크립팅 언어 소개 Apr 16, 2025 am 12:18 AM

PHP는 동적 웹 개발 및 서버 측 응용 프로그램에 사용되는 서버 측 스크립팅 언어입니다. 1.PHP는 편집이 필요하지 않으며 빠른 발전에 적합한 해석 된 언어입니다. 2. PHP 코드는 HTML에 포함되어 웹 페이지를 쉽게 개발할 수 있습니다. 3. PHP는 서버 측 로직을 처리하고 HTML 출력을 생성하며 사용자 상호 작용 및 데이터 처리를 지원합니다. 4. PHP는 데이터베이스와 상호 작용하고 프로세스 양식 제출 및 서버 측 작업을 실행할 수 있습니다.

PHP 및 웹 : 장기적인 영향 탐색 PHP 및 웹 : 장기적인 영향 탐색 Apr 16, 2025 am 12:17 AM

PHP는 지난 수십 년 동안 네트워크를 형성했으며 웹 개발에서 계속 중요한 역할을 할 것입니다. 1) PHP는 1994 년에 시작되었으며 MySQL과의 원활한 통합으로 인해 개발자에게 최초의 선택이되었습니다. 2) 핵심 기능에는 동적 컨텐츠 생성 및 데이터베이스와의 통합이 포함되며 웹 사이트를 실시간으로 업데이트하고 맞춤형 방식으로 표시 할 수 있습니다. 3) PHP의 광범위한 응용 및 생태계는 장기적인 영향을 미쳤지 만 버전 업데이트 및 보안 문제에 직면 해 있습니다. 4) PHP7의 출시와 같은 최근 몇 년간의 성능 향상을 통해 현대 언어와 경쟁 할 수 있습니다. 5) 앞으로 PHP는 컨테이너화 및 마이크로 서비스와 같은 새로운 도전을 다루어야하지만 유연성과 활발한 커뮤니티로 인해 적응력이 있습니다.

VSCODE에 필요한 컴퓨터 구성 VSCODE에 필요한 컴퓨터 구성 Apr 15, 2025 pm 09:48 PM

대 코드 시스템 요구 사항 : 운영 체제 : Windows 10 이상, MacOS 10.12 이상, Linux 배포 프로세서 : 최소 1.6GHz, 권장 2.0GHz 이상의 메모리 : 최소 512MB, 권장 4GB 이상의 저장 공간 : 최소 250MB, 권장 1GB 및 기타 요구 사항 : 안정 네트워크 연결, Xorg/Wayland (LINUX)

PHP를 사용하는 이유는 무엇입니까? 설명 된 장점과 혜택 PHP를 사용하는 이유는 무엇입니까? 설명 된 장점과 혜택 Apr 16, 2025 am 12:16 AM

PHP의 핵심 이점에는 학습 용이성, 강력한 웹 개발 지원, 풍부한 라이브러리 및 프레임 워크, 고성능 및 확장 성, 크로스 플랫폼 호환성 및 비용 효율성이 포함됩니다. 1) 배우고 사용하기 쉽고 초보자에게 적합합니다. 2) 웹 서버와 우수한 통합 및 여러 데이터베이스를 지원합니다. 3) Laravel과 같은 강력한 프레임 워크가 있습니다. 4) 최적화를 통해 고성능을 달성 할 수 있습니다. 5) 여러 운영 체제 지원; 6) 개발 비용을 줄이기위한 오픈 소스.

VSCODE는 확장자를 설치할 수 없습니다 VSCODE는 확장자를 설치할 수 없습니다 Apr 15, 2025 pm 07:18 PM

VS 코드 확장을 설치하는 이유는 다음과 같습니다. 네트워크 불안정성, 불충분 한 권한, 시스템 호환성 문제, C 코드 버전은 너무 오래된, 바이러스 백신 소프트웨어 또는 방화벽 간섭입니다. 네트워크 연결, 권한, 로그 파일, 업데이트 대 코드 업데이트, 보안 소프트웨어 비활성화 및 대 코드 또는 컴퓨터를 다시 시작하면 점차 문제를 해결하고 해결할 수 있습니다.

Docker 프로세스를 보는 방법 Docker 프로세스를 보는 방법 Apr 15, 2025 am 11:48 AM

도커 프로세스보기 방법 : 1. Docker CLI 명령 : Docker PS; 2. Systemd Cli 명령 : SystemCTL 상태 Docker; 3. Docker Compose CLI 명령 : Docker-Compose PS; 4. 프로세스 탐색기 (Windows); 5. /Proc Directory (Linux).

VScode 란 무엇입니까? VScode 란 무엇입니까? Apr 15, 2025 pm 06:45 PM

VS Code는 Full Name Visual Studio Code로, Microsoft가 개발 한 무료 및 오픈 소스 크로스 플랫폼 코드 편집기 및 개발 환경입니다. 광범위한 프로그래밍 언어를 지원하고 구문 강조 표시, 코드 자동 완료, 코드 스 니펫 및 스마트 프롬프트를 제공하여 개발 효율성을 향상시킵니다. 풍부한 확장 생태계를 통해 사용자는 디버거, 코드 서식 도구 및 GIT 통합과 같은 특정 요구 및 언어에 확장을 추가 할 수 있습니다. VS 코드에는 코드에서 버그를 신속하게 찾아서 해결하는 데 도움이되는 직관적 인 디버거도 포함되어 있습니다.

vScode 이전 다음 바로 가기 키 vScode 이전 다음 바로 가기 키 Apr 15, 2025 pm 10:51 PM

vs 코드 1 단계/다음 단계 바로 가기 키 사용 : 1 단계 (뒤로) : Windows/Linux : Ctrl ←; MACOS : CMD ← 다음 단계 (앞으로) : Windows/Linux : Ctrl →; MACOS : CMD →

See all articles