>  기사  >  PHP 프레임워크  >  Swoole은 어떤 프로토콜을 사용합니까?

Swoole은 어떤 프로토콜을 사용합니까?

(*-*)浩
(*-*)浩원래의
2019-12-06 10:44:452738검색

Swoole은 어떤 프로토콜을 사용합니까?

TCP는 스트리밍 프로토콜입니다. 클라이언트가 서버에 데이터를 보낸 후 서버에서 한 번에 완전히 수신되지 않을 수 있습니다. 클라이언트는 여러 개의 데이터를 서버에 보내고, 서버는 이를 한꺼번에 받을 수 있습니다. ㅋㅋㅋ                                                                                  (추천 학습: swoole 비디오 튜토리얼 )

실습 , 우리는 서버가 한 번에 더도 덜도 아닌 완전한 데이터 조각을 받을 수 있기를 바랍니다.

기존 TCP 서버에서 프로그래머는 캐시 영역을 유지하고 먼저 읽은 데이터를 캐시 영역에 쓴 다음 미리 설정된 프로토콜 내용을 통해 전체 데이터 조각의 시작, 끝 및 길이를 구별해야 하는 경우가 많습니다. 처리를 위해 완전한 데이터 조각을 논리적 부분으로 전달하는 것이 사용자 정의 프로토콜의 기능입니다.

Swoole에서는 데이터 캐시 영역이 하위 계층에 구현되었으며 일반적으로 사용되는 여러 프로토콜 유형이 내장되었습니다. 데이터는 하위 계층에서 직접 분할되어 onReceive 콜백 함수에서 a 또는 여러 완전한 데이터 세그먼트.

pakcage_max_length를 구성하여 데이터 버퍼의 크기를 제어할 수 있습니다.

$configs = [];
$configs["package_max_length"] = 8192;
$server->set($configs);

swoole은 현재 EOF 터미네이터 프로토콜과 고정 헤더 및 본문 프로토콜의 두 가지 통신 프로토콜을 지원합니다.

package_max_length

package_max_length는 open_length_check, open_eof_check 또는 open_http_protocol 및 기타 프로토콜 구문 분석이 활성화된 경우 최대 패킷 크기를 설정하는 데 사용됩니다. 하위 계층은 데이터 패킷 접합을 처리합니다. 이때 데이터 패킷이 완전히 수신되지 않으면 모든 데이터가 메모리에 저장됩니다.

따라서 package_max_length를 데이터 패킷의 최대 허용 메모리 크기로 설정해야 합니다.

동시에 데이터를 보내는 10,000개의 TCP 연결이 있다면 각 데이터 패킷은 2MB이며, 가장 극단적인 경우 20GB의 메모리 공간을 차지하게 됩니다. 따라서 이 매개변수를 너무 크게 설정하면 안 됩니다. 그렇지 않으면 많은 메모리를 차지하게 됩니다.

관련 구성 옵션

open_length_check

데이터 패킷의 길이가 package_max_length를 초과하는 것으로 확인되면 데이터를 직접 폐기하고 연결이 종료되므로 메모리를 차지하지 않으며 웹소켓에 적합합니다. mqtt, http2 프로토콜.

open_eof_check

데이터 패킷의 길이를 미리 알 수 없기 때문에 수신된 데이터는 계속해서 메모리에 저장되며 계속해서 늘어납니다. 메모리 사용량이 package_max_length를 초과한 것으로 확인되면 데이터 패킷이 직접 삭제되고 연결이 종료됩니다.

open_http_protocol

HTTP GET 요청은 최대 8KB 데이터를 허용하며 이 구성은 수정할 수 없습니다. POST 요청은 package_max_length를 초과한 것으로 확인되면 HTTP 400 오류로 인해 데이터가 직접 삭제됩니다. 전송되고 연결이 종료됩니다.

EOF 프로토콜

은 EOF 프로토콜이라고 하는 분할 프로토콜의 표시로 일반 데이터에 표시되지 않는 고정된 문자열 세트 /r/n을 사용합니다.

EOF 프로토콜이 무엇인가요?

EOF는 파일 끝(End of File)을 나타내며 rn을 끝 태그로 사용합니다.

데이터 스트림의 데이터를 하나씩 읽을 때 EOF 표시가 읽혀지면 데이터의 끝을 읽었다는 의미입니다.

TCP 데이터 흐름에서 EOF 프로토콜을 사용하는 데이터 흐름의 특징은 |data|EOF|data|EOF|입니다.

EOF 프로토콜 처리의 원리는 일반 데이터의 각 문자열 끝에 데이터에 절대 나타나지 않는 미리 정해진 문자열을 끝 표시로 추가하여 수신된 데이터를 EOF에 따라 나눌 수 있다는 것입니다. 표시. .

일반적인 memcached, ftp 및 stmp는 모두 /r/n을 종결자로 사용합니다. 데이터를 보낼 때 데이터 패킷 끝에 /r/n을 추가하면 됩니다.

EOF 프로토콜 처리를 사용할 때 데이터 패킷 중간에 EOF가 발생하지 않는지 확인하세요. 그렇지 않으면 하위 패키징 오류가 발생합니다.

Swoole은 어떤 프로토콜을 사용합니까?

위 내용은 Swoole은 어떤 프로토콜을 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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