온라인 채팅 예시를 작성하기 위해 swoole 확장 프로그램을 사용하다가 문제가 발생했습니다. 많은 정보를 확인하고 여기에 기록합니다.
swoole_server의 인터페이스 문서를 보면 다음의 콜백 등록 인터페이스에 명확한 설명이 있습니다.
* swoole_server->on & swoole_http_server->on are the same except swoole_http_server : * - not accepting onConnect/onReceive callback accept events onRequest
swoole_http_server와 swoole_server는 일반적으로 동일하지만 swoole_http_server에서는 연결 및 수신 인터페이스가 호출되지 않으며 이에 따라 요청 인터페이스가 호출됩니다.
채팅의 작은 예에서는 swoole_websocket_server를 사용합니다. 테스트를 통해 swoole_websocket_server의 수신 인터페이스는 호출되지 않았지만 긴 연결 서비스로
의 콜백이 닫히고 연결됩니다. 노동자 여전히 필요합니다. 예를 들어 온라인 브로드캐스트 알림과 오프라인 브로드캐스트 알림을 제대로 구현하려면 해당 두 인터페이스에 대한 콜백이 필요합니다. 그래서 관계자는 콜백을 확실히 지지합니다.
스울 버전 업데이트 공지를 통해 드디어 문제가 발견되었습니다.
swoole-1.7.16 버전이 출시되었습니다. BUG 복구 버전:
swoole_server->tick 및 swoole_timer_tick 기능 추가
gzip 압축을 위한 http 서버 지원 추가
swoole_table 추가 ->incr/decr 원자 증가/감소 방법
open_eof_split 구성 추가, EOF 감지를 사용하여 자동 하도급 지원
서버 통계 항목 request_count 및 Worker_request_count 추가
서버 연결 반복기 증가, foreach를 사용하여 모든 연결을 통과할 수 있습니다.
http 서버에서 요청한 query_string 추가
http 서버 multipart-form 및 업로드된 파일에 대한 지원 추가
onReceive 데이터 병합 실패 BUG 수정
swoole_server->addtimer 및 틱 BUG 수정 타이머 충돌
낮은 버전 Linux에서 차단을 설정하지 않는 Accept 문제 수정
로그를 반복적으로 인쇄하기 위해 너무 많은 연결을 반환하는 Accept 실패 문제 수정
잘못된 task_max_request 매개변수 문제 수정
waitall 수정 of swoole_client 매개변수 무효화 문제
swoole_table의 무한 루프 BUG 수정
WebSocket 서버 onOpen 콜백 함수의 두 번째 매개변수가 $fd에서 $request 개체로 조정되었습니다.
HTTP 서버에서 빈 본문 응답 전송을 허용합니다
swoole_websocket_server 비활성화 - >send 메소드
BASE 모드는 모든 FD로 데이터 전송을 지원합니다
dispatch_mode = 1, 3으로 설정한 다음 onClose/onConnect 이벤트 콜백을 닫습니다
non 설정 허용 -작업자 프로세스의 시스템 예약 신호
개체 리소스 속성에 대한 기본 의존성을 제거하고 포인터를 직접 읽어 성능을 향상합니다.
하트비트 스레드가 레거시 연결을 강제로 종료할 수 없는 문제를 해결합니다.
디스패치 모드 최적화= 작업 할당 효율성을 높이기 위한 3가지 모드
작업자 할당 모드에 문제가 있습니다. 선점 모드와 폴링 모드에서는 이 두 콜백 인터페이스가 더 이상 호출되지 않습니다. 고정 모드에서 각 클라이언트의 데이터 패킷은 고정 작업자 프로세스에 의해 처리되므로 이 클라이언트에 속한 일부 개인 정보는 작업자 프로세스에 저장될 수 있고 자주 읽고 쓰는 일부 데이터는 캐시될 수 있습니다. Erlang의 프로세스 사전이 작동합니다. 이러한 방식으로 클라이언트는 오프라인 상태가 될 때 일부 정리 작업을 수행해야 합니다. 온라인 초기화 작업. 그래서 이 모델은 매우 의미 있고 필요합니다. 고정 모드는 각 클라이언트의 논리가 상대적으로 균일한 상황을 처리하는 데 적합합니다.
위 내용은 PHP의 swoole 확장에서 onclose 및 onconnect 인터페이스가 호출되지 않는 문제를 소개하며, 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.