PHP의 비동기, 병렬, 고성능 네트워크 통신 엔진은 순수 C 언어로 작성되었으며 PHP 언어의 비동기 멀티스레드 서버, 비동기 TCP/UDP 네트워크 클라이언트, 비동기 MySQL, 비동기 Redis, 데이터베이스 연결 풀, AsyncTask를 제공합니다. , 메시지 큐, 밀리초 타이머, 비동기 파일 읽기 및 쓰기, 비동기 DNS 쿼리. Swoole에는 Http/WebSocket 서버/클라이언트 및 Http2.0 서버가 내장되어 있습니다.
Swoole 공식 웹사이트의 문서는 풍부하지 않아 골치 아픈 일이지만 대부분의 문제가 설명되어 있습니다. Swoole에 관심이 있다면 이 Swoole 입문 튜토리얼을 확인해 보세요. Swoole은 PHP를 새로운 수준으로 끌어올리는 멀티 스레딩 및 긴 연결과 같은 많은 멋진 기능을 제공합니다. 이 기사는 Laravel과 Swoole의 조합에 대해 논의하는 것으로 제한됩니다.
Swoole이 서비스를 제공하려면 CLI 모드에서 실행되어야 합니다. CLI 모드란 무엇인가요? Swoole 비즈니스 코드가 server.php라는 파일에 작성된 경우 명령줄에 php server.php를 입력하여 엽니다. Laravel 프레임워크는 이와 같이 작동하지 않기 때문에 이것은 골치 아픈 일인데 어떻게 Laravel과 결합할 수 있습니까? 그렇습니다. 장인 명령을 사용자 정의하는 것은 매우 간단합니다.
STEP 1 - 명령 사용자 정의
Artisan Commnad 사용자 정의에 대해 알아야 할 모든 기술 사항은 여기에 있습니다. SwooleCommand라는 명령을 사용자 정의하고 키 코드를 직접 붙여 넣습니다:
fire is Entry
명령줄(CLI)에서 php artisan swoole start를 실행하여 Swoole 서비스를 시작합니다. 코드를 분석해 보면 명령 매개변수에 시작, 다시 시작, 종료가 포함되어 있는 것을 알 수 있는데, 문제를 방지하기 위해 시작 부분만 구현했습니다. 종료해야 하는 경우에는 Linux에서 kill 명령을 사용하여 프로세스를 종료합니다. 단계는 매우 간단합니다.
1. ps -aux|grep artisan 명령을 실행하여 pid를 가져옵니다(여러 프로세스가 있는 경우 첫 번째 프로세스를 종료하세요)
2 kill pid 명령을 실행하면 pid가 표시됩니다. 첫 번째 단계
Swoole의 구성은 이 기사의 범위가 아닙니다. Swoole 서비스는 나중에 상호 작용을 위한 명령을 보낼 수 있도록 Laravel이 $serv 변수에 저장되어 있습니다. Swoole의 이벤트 응답 코드는 다음과 같습니다.
Handler를 사용하여 이벤트 응답 처리
fire가 Swoole의 문을 열면 여기 핸들러는 Swoole과 Laravel 사이의 컨베이어 벨트이며 핸들러가 직접 작성했습니다. , Laravel 프레임워크에 다양한 비즈니스 로직을 작성할 수 있으며, Laravel이 제공하는 다양하고 효율적이고 편리한 기능을 사용할 수 있습니다. "핸들러"는 명명 규칙에 따라 "콜백", "관리자" 또는 "리스너"라고 부를 수도 있습니다. 나는 새로운 방법을 사용하지 않았지만 Laravel의 IoC를 사용하여 App::make를 주입했습니다. 이는 주로 문제를 해결하기 위한 것이었습니다(왜냐하면 핸들러의 생성자는 내 사용자 정의 데이터 처리 클래스를 사용하기 때문입니다. 아래 참조).
STEP 2-커스텀 핸들러
커스텀 클래스이므로 네임스페이스를 따르고 작곡가.json에 선언해 주세요. 완료되면 작곡가 덤프-autoload 명령을 실행하여 업데이트하세요. 예를 들어, 핸들러를 저장하기 위해 apphandlers 폴더를 생성하면 작곡가.json에 다음과 같이 표시됩니다.
autoload는 누락될 수 없습니다
그런 다음 핸들러에서 수행할 작업을 결정하는 것은 사용자의 몫입니다. 어쨌든 컨트롤러를 작성하는 것과 거의 같습니다. Laravel 프레임워크의 다양한 기능을 마음대로 사용할 수 있습니다. 붙여넣기:
전 섹션에서 제가 IoC를 사용한다고 언급한 이유는 자체 데이터 처리 클래스를 사용하기 때문입니다. 추가, 삭제, 수정, 쿼리 및 기타 데이터 처리 작업을 리포지토리에 넣었습니다. 단지 코드가 더 깔끔하게 보이도록 하기 위해서입니다. 이렇게 Swoole을 이용하여 데이터를 수신하는 과정은 완료되었는데, Swoole을 이용하여 클라이언트에게 데이터를 전송하고 싶다면 어떻게 해야 할까요? 에헴, 이것은 좀 더 번거롭고 구현하려면 곡선 방법이 필요합니다.
STEP 3-데이터 보내기
두 가지 방법이 있지만 둘 다 클라이언트의 주소 데이터를 저장하는 데 캐시 kv 구조(Laravel 자체 Cache 기능이면 충분함)와 분리할 수 없습니다. 그렇지 않으면 어떻게 알 수 있습니까? 어디로 보내나요? 저는 문제를 해결하기 위해 첫 번째를 사용합니다. Swoole은 데이터 전송과 관련이 없습니다. 장기간 웹소켓 연결이 필요한 경우에는 두 번째를 사용하면 됩니다. 더 좋은 방법이 있으면 알려주세요!
첫 번째: fsockopen
매우 간단하고 swoole과는 아무런 관련이 없습니다. Swoole의 Connection_info 함수를 사용하여 클라이언트의 IP 주소와 포트를 가져온 다음 fsockopen을 사용하여 데이터를 직접 보냅니다.
두 번째: 내부 포트 모니터링
Swoole은 여러 포트 모니터링을 지원합니다. 구현 아이디어는 fsockopen을 사용하여 내부 수신 포트로 데이터를 보낸 다음 $serv를 호출하여 메시지를 보낼 수 있다는 것입니다. 이것의 장점은 클라이언트의 실제 IP 주소와 포트를 알 필요가 없다는 것입니다. 클라이언트의 $fd 식별자를 캐시에 저장하고 데이터를 직접 보낼 수 있습니다. 이 아이디어를 사용하여 iptables로 포트를 여는 것을 잊지 마십시오. 긴 연결 없이는 너무 번거롭다고 생각해서 직접 사용하지 않았습니다.
요약
Swoole은 훌륭하지만 실제로 많이 사용하지는 않았습니다(프로젝트에 충분한 돈이 생길 때까지 기다리겠습니다). 공식 웹사이트의 구성을 참고하여 Swoole을 nginx 호스팅 에이전트로 사용할 수도 있으며 성능이 크게 향상되었다고 합니다.
PHP 중국어 웹사이트에는 무료 Swoole 입문 튜토리얼이 많이 있습니다. 누구든지 배울 수 있습니다!
위 내용은 Laravel에서 Swoole을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!