Swoole 확장 6 가지 모드 깊이 있 게 설명

5076 단어 Swoole넓히다
머리말
병발 문 제 는 두 가지 문제 로 이해 할 수 있다.
  • 동시 연결 수 는 클 라 이언 트 TCP 연결 을 동시에 받 아들 이 는 것 을 지원 하 는 것 이다
  • .
  • 동시 요청 수,초당 얼마나 많은 요청 을 처리 할 수 있 습 니까
  • Swoole 바 텀 은 epoll 을 기반 으로 하기 때문에 첫 번 째 문 제 는 Swoole 확장 에 있어 서 사실상 문제 가 없습니다.스 울 을 사용 하면 10 만 내지 100 만 장 연결 에 쉽게 대응 할 수 있다.개발 자가 유일 하 게 해 야 할 일 은 수정 입 니 다.
    
    ulimit -n
    시스템 최대 파일 설명 자 를 10 만 개 이상 으로 변경 합 니 다.
    서로 다른 모델 이 1 초 에 얼마나 많은 요청 수 를 처리 할 수 있 는 지,이것 은 응용 층 이 고려 해 야 할 문제 이다.그리고 서로 다른 장면 에서 일부 모드 는 사용 할 수 없습니다.진짜 어 려 운 문 제 는 바로 여기에 있다.실제로
    도 구 는 영원히 죽 고 사람 은 산다.
    아무리 복잡 하고 어 려 운 장면 이라도 똑똑 한 엔 지 니 어 를 막 을 수 없다.스 울 이 제공 하 는 각종 기능 을 합 리 적 으로 이용 하면 각종 난 제 를 교묘 하 게 해결 할 수 있다.
    제1 Worker 동기 화 블록
    이 모드 의 사용 방법:
  • swoole_server 를 SWOOLE 로 설정PROCESS
  • Worker 프로 세 스 만 사용
  • 상황 에 따라 worker 설정num 의 수치
  • dispatch 설정mode 매개 변 수 는 1 또는 3
  • 입 니 다.
  • Worker 프로 세 스 에 서 는 동기 화 차단 코드 를 사용 하여 작 성 됩 니 다.비동기 IO 인터페이스
  • 를 사용 하지 않 습 니 다.
    이 모드 의 병목 은 onRequest 나 onReceive 에서 코드 논리 적 처리 속도 에 있 습 니 다.속도 에 따라 몇 가지 로 나 눌 수 있다
  • 외부 네트워크 CURL 호출.이것 은 가장 느 리 고 빠 른 수백 밀리초 이 며 느 린 상황 은 몇 십 초
  • 가 걸 릴 수 있다.
  • 내부 네트워크 RPC 또는 Http 인터페이스,이것 은 이 인터페이스 와 의 속도
  • 에 달 려 있다.
  • MySQL 은 복잡 한 조회 로 하나의 SQL 이 색인 이 없 으 면 몇 백 밀리초,심지어 몇 초 이상 걸 릴 수 있 습 니 다.홈 키 조회 나 색인 이 충분 하 다 면 몇 밀리초
  • 만 걸 릴 수 있 습 니 다.
  • Redis/memcache,메모리 데이터베이스 랜 이 고 긴 연결 입 니 다.한 번 호출 하면 몇 백 초,즉 0.x 밀리초 만 에 돌아 올 수 있 습 니 다
  • 디스크 파일 을 읽 습 니 다.일반 기계 디스크 가 PageCache 에 명중 하지 않 아 디스크 길 을 찾 는 데 몇 십 밀리초 가 걸 릴 수 있 습 니 다.SSD 디스크 속도 가 몇 밀리초 만 더 빨 라 지면 무 작위 읽 기 가 완 료 됩 니 다.
  • 메모리 파일 시스템 이나 공유 메모리,읽 기/tmp 또는/dev/shm 의 공유 파일 은 본질 적 으로 공유 메모 리 를 읽 는 것 이 고 몇 십 초 만 에 완성 할 수 있 습 니 다.공유 메모 리 를 직접 읽 는 것 이 더 빠 를 수 있 습 니 다.나 초 단계 입 니 다.
  • 프로 세 스 개수
    위의 IO 소모 시간 에 따라 적당 한 프로 세 스 수 를 설정 하면 됩 니 다.
  • IO 는 느 리 면 수백 개의 Worker 프로 세 스 를 설정 합 니 다.예 를 들 어 MySQL,CURL,대량의 읽 기와 쓰기 디스크
  • IO 는 Redis,메모리 파일 시스템,공유 메모리
  • 등 소량의 프로 세 스 를 설정 할 수 있 습 니 다.
    배달 모드
    요청 이 무 상태 라면 dispatch 를 사용 할 수 있 습 니 다.mode=1 또는 3,차례로 배달 하거나 한가 로 운 배달 을 구분 합 니 다.
    긴 연결 응용
    예 를 들 어 채 팅 방,온라인 게임.연결 사이 에는 상호작용 의 응용 이 필요 하 다.MySQL/Redis/파일 로 사용자 의 연결 fd 를 저장 하고 그룹 정 보 를 저장 할 수 있 습 니 다.한 사용자 에 게 데 이 터 를 보 내 려 면 UID 에 따라 해당 하 는 fd 를 찾 아 데 이 터 를 보 내 면 됩 니 다.그룹 을 보 내 면 장애 ID 에 따라 fd 목록 을 조회 하고 데 이 터 를 반복 해서 보 내 면 됩 니 다.
    제2 Worker 비 차단+작업
    이 모델 은 전형 적 인 동기 화+비동기 입 니 다.복잡 한 업무 논 리 는 동기 화 차단 을 사용 하여 Task 프로 세 스 에서 처리 합 니 다.간단 한 동시 다발 논 리 는 비동기 비 차단 을 사용 하여 Worker 프로 세 스 에서 처리 합 니 다.
    사용 방법
  • SWOOLE 사용 하기PROCESSS 모드
  • dispatch_mode 설정 2(기본 값 은 2,아무것도 하지 않 음)
  • worker_num 을 CPU 핵 수로 설정
  • task_worker_num 은 업무 논리의 소모 상황 에 따라 설정 합 니 다.평균 소모 시간 이 비교적 길 면 수백 개의 프로 세 스 를 설정 해 야 합 니 다.소모 시간 이 비교적 짧 으 면 몇 십 개의 프로 세 스
  • 를 설정 할 수 있 습 니 다.
    작업 자 프로 세 스
    이 모드 에서 Worker 프로 세 스 는 동기 화 차단 작업 을 할 수 없습니다.요청 응답 이나 데이터 수신 전송 만 처리 하고 PHP 배열 이나 대상 작업 또는 다른 계산 논리 만 수행 합 니 다.구체 적 인 참조 모드 3 Worker 프로 세 스 전체 비동기.
    작업 프로 세 스
    무 상태 로 임 무 를 처리 하고 결 과 를 되 돌려 줍 니 다.단일 Task 의 실행 시간 에 주의해 야 합 니 다.처리 시간 이 너무 길 어서 Task 가 너무 많이 줄 을 서 는 것 을 피해 야 합 니 다.
    제3 Worker 전체 비동기
    이 모드 는 진정한 비동기 비 차단 프로 그래 밍 입 니 다.코드 에 서 는 Swole 이 제공 하 는 비동기 비 차단 IO 작업 만 사용 할 수 있 습 니 다.curl,my sql,redis,fsockopen,stream,socket,proc 와 같은 일반적인 PHP 차단 IO 함 수 를 실행 할 수 없습니다.오픈 등.
    모드 2 와 달리 전체 비동기 서버 는 Task 프로 세 스 를 사용 하지 않 습 니 다.복잡 한 업무 논리 라 도 Worker 프로 세 스에 서 실 행 됩 니 다.순수 비동기 프로 그래 밍 은 개발 자 에 대한 요구 가 비교적 높다.
    사용 방법
  • dispatch_mode 설정 2
  • worker_num 을 CPU 핵 수로 설정
  • 논리 적 실현
    Worker 프로 세 스 의 PHP 코드 는 다음 세 가지 동작 만 수행 할 수 있 습 니 다.
  • swoole 사용redis、swoole_mysql、swoole_http_client、swoole_client+async 조작
  • PHP 배열,대상 조작 또는 기타 메모리 계산 논리
  • swoole 사용server 의 send,push,close,response->end 등 동작
  • 적용 필드
  • 긴 연결 서비스
  • 병발 능력 과 물동량 에 대한 요구 가 비교적 높다
  • 팀 개발 자의 기술 수준 이 비교적 높다
  • 폐단 과 해결 방안
  • 순수한 이 보 는 플러그 인 리 셋 방식 으로 코드 를 작성 해 야 합 니 다.전통 적 인 프로 그래 밍 모드 와 는 완전히 다 릅 니 다.이 보 는 이벤트 구동 식 이 고 코드 는 순서대로 실행 되 는 것 이 아 닙 니 다.
  • 비동기 내장 리 셋 방식 은 프로그램 논리 가 복잡 한 후에 유지 하기 어려워 집 니 다
  • Promise 나 Yild/Generator 를 사용 하여 비동기 프로 그래 밍 을 간소화 할 수 있 습 니 다.
    제4 베이스 모드+동기 화 블록
    Base 모드 는 간단 한 버 전 으로 Base 모드 에서 Swole 의 운행 원 리 는 Node.js 와 완전히 일치 하 며 단일 스 레 드 입 니 다.TCP 클 라 이언 트 에 대한 Accept,Send,Recv,Close 는 같은 프로 세 스 에서 작 동 합 니 다.
    Process 동기 화 차단 모드 와 달리 BASE 모드 에서 Worker 프로 세 스 의 스케줄 링 은 운영 체제 에서 이 루어 집 니 다.따라서 Leader-Follower 모드 의 서버 프로그램 을 실현 할 수 있 습 니 다.
    사용 방법
  • SWOOLE 사용 하기BASE 모드
  • worker_num 은 논리 코드 의 소모 상황 에 따라 수백 또는 몇 십
  • 을 설정 합 니 다.
  • worker 프로 세 스 내 동기 화 차단 IO 작업 사용
  • 적용 필드
  • 웹 서비스,RPC 서비스
  • 와 같은 짧 은 연결&요청 응답 식 서비스 에 적합 합 니 다.
  • 이 모드 는 단일 연결 과 병행 을 실현 할 수 없습니다.클 라 이언 트 의 연결 은 특정한 Worker 프로 세 스 Accept 에 의 해 이 프로 세 스 에서 만 요청 을 처리 할 수 있 습 니 다
  • 제5 과정
    Process 는 프로 세 스 관리 에 대한 패 키 지 를 제공 합 니 다.Process 기반 구현 가능:
    다 중 프로 세 스+프로 세 스 간 통신 프로 그래 밍
    다른 언어 로 작 성 된 프로그램 을 하위 프로 세 스 로 포장 하고 표준 입 출력 을 파이프 로 바 꾸 어 이 프로그램 과 통신 합 니 다.임의의 프로 그래 밍 언어 를 내 PHP 에 사용 할 수 있 습 니 다.
    제6 sendMessage
    스 울 확장 에 관 한 6 가지 모델 에 대해 깊이 있 게 설명 한 이 글 은 여기까지 입 니 다.스 울 확장 에 관 한 5 가지 모델 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기