찾다
PHP 프레임워크SwooleSwoole에서 TCP 긴 연결을 구현하는 방법

인터넷의 급속한 발전과 함께 TCP 프로토콜의 적용이 점점 더 널리 보급되고 있으며, 특히 온라인 게임, 인스턴트 메시징, 금융 거래 등의 분야에서 TCP 긴 연결은 필수 불가결합니다. 고성능 PHP 네트워크 통신 프레임워크인 Swoole은 자연스럽게 TCP 긴 연결을 완벽하게 지원할 수 있습니다. 이 기사에서는 Swoole에서 TCP 긴 연결을 구현하는 방법을 공유합니다.

1. Swoole의 TCP 영구 연결

Swoole에서 TCP 영구 연결은 클라이언트와 서버가 네트워크 연결을 설정한 후 클라이언트가 연결을 적극적으로 종료할 때까지 해당 연결을 통해 여러 요청과 응답을 할 수 있음을 의미합니다. 연결이 비정상입니다. 짧은 연결과 비교하여 TCP 긴 연결은 TCP 3방향 핸드셰이크 및 4웨이브 수를 줄이고, 네트워크 대기 시간과 리소스 사용량을 줄이며, 서버의 처리량과 안정성을 향상시킬 수 있으므로 높은 동시성 시나리오에서 널리 사용됩니다. .

2. TCP 긴 연결 구현 단계

  1. TCP 서버 구축

Swoole에서는 다음 코드를 통해 TCP 서버를 생성할 수 있습니다.

$serv = new SwooleServer("127.0.0.1", 9501);

$serv->on('connect', function ($server, $fd) {
    echo "Client: Connect.
";
});

$serv->on('receive', function ($server, $fd, $from_id, $data) {
    $server->send($fd, "Server: ".$data);
});

$serv->on('close', function ($server, $fd) {
    echo "Client: Close.
";
});

$serv->start();

위 코드에서는 127.0에 TCP 서버를 생성했습니다. 0.1 :9501은 TCP 서버를 모니터링하고 연결, 수신 및 닫기의 세 가지 이벤트 콜백 기능을 등록합니다. 그 중 connect 이벤트는 클라이언트가 서버와 연결을 맺은 후에 실행되고, receive 이벤트는 서버가 클라이언트 요청 메시지를 받은 후에 실행되며, close 이벤트는 클라이언트가 적극적으로 연결을 닫거나 연결을 끊은 후에 실행됩니다. 연결이 비정상적으로 끊어졌습니다.

  1. TCP 긴 연결 구현

위의 코드를 기반으로 TCP 긴 연결의 경우 연결 이벤트에 클라이언트 연결을 저장하는 변수만 추가하면 됩니다.

$serv = new SwooleServer("127.0.0.1", 9501);

// 存储客户端连接的变量
$connections = array();

$serv->on('connect', function ($server, $fd) use (&$connections) {
    echo "Client: Connect.
";
    $connections[$fd] = array(
        'fd' => $fd,
        'last_time' => time()
    );
});

$serv->on('receive', function ($server, $fd, $from_id, $data) {
    $server->send($fd, "Server: ".$data);
});

$serv->on('close', function ($server, $fd) use (&$connections) {
    echo "Client: Close.
";
    // 删除客户端连接
    unset($connections[$fd]);
});

$serv->start();

위 코드에서 A $를 정의합니다. 클라이언트 연결을 저장하는 연결 배열입니다. 새 연결이 설정되면 연결 정보를 배열에 저장하고 연결이 닫힐 때 마지막 통신 시간을 기록하며 배열에서 연결 정보를 삭제합니다.

또한 오랫동안 데이터 상호 작용이 없어 연결이 끊어지는 것을 방지하기 위해 타이머를 사용하여 가끔씩 오랫동안 통신이 없는 연결을 감지하고 연결을 끊을 수 있습니다.

$serv = new SwooleServer("127.0.0.1", 9501);

// 存储客户端连接的变量
$connections = array();

$serv->on('connect', function ($server, $fd) use (&$connections) {
    echo "Client: Connect.
";
    $connections[$fd] = array(
        'fd' => $fd,
        'last_time' => time()
    );
});

$serv->on('receive', function ($server, $fd, $from_id, $data) {
    $server->send($fd, "Server: ".$data);
    // 更新最后通信时间
    global $connections;
    $connections[$fd]['last_time'] = time();
});

$serv->on('close', function ($server, $fd) use (&$connections) {
    echo "Client: Close.
";
    // 删除客户端连接
    unset($connections[$fd]);
});

// 定时器,检测长时间没有通信的连接并断开
$serv->tick(1000, function() use (&$connections) {
    global $serv;
    $now = time();
    foreach($connections as $fd => $conn) {
        if ($now - $conn['last_time'] > 60) {
            $serv->close($fd);
            unset($connections[$fd]);
        }
    }
});

$serv->start();

위에서 코드를 추가하면 모든 연결의 마지막 통신 시간을 1초마다 감지하는 타이머가 생성되며, 특정 시간(이 예에서는 60초)을 초과하면 연결이 종료되고 $connections 배열에서 연결 정보가 삭제됩니다.

3. 요약

위 단계를 통해 Swoole에서 TCP 긴 연결을 구현할 수 있습니다. 실제 개발에서는 긴 연결의 안정성과 신뢰성을 보장하기 위해 하트비트 패킷 사용자 정의, 시간 제한 설정, 연결 상태 모니터링 등과 같은 특정 비즈니스 조건에 따라 긴 연결 구현을 최적화해야 합니다. 사이. 이 기사가 TCP 긴 연결을 구현하는 데 도움이 되기를 바랍니다.

위 내용은 Swoole에서 TCP 긴 연결을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Swoole Open-Source 프로젝트에 어떻게 기여할 수 있습니까?Swoole Open-Source 프로젝트에 어떻게 기여할 수 있습니까?Mar 18, 2025 pm 03:58 PM

이 기사는 버그보고, 기능 제출, 코딩 및 문서 개선을 포함하여 Swoole Project에 기여하는 방법을 설명합니다. 초보자가 기여를 시작하기 위해 필요한 기술과 단계에 대해 논의하고, 압박을 찾는 방법은

사용자 정의 모듈로 Swoole을 어떻게 확장합니까?사용자 정의 모듈로 Swoole을 어떻게 확장합니까?Mar 18, 2025 pm 03:57 PM

기사는 사용자 정의 모듈, 상세 단계, 모범 사례 및 문제 해결과 함께 Swoole을 확장하는 것을 논의합니다. 주요 초점은 기능과 통합을 향상시키는 것입니다.

Swoole의 비동기 I/O 기능을 어떻게 사용합니까?Swoole의 비동기 I/O 기능을 어떻게 사용합니까?Mar 18, 2025 pm 03:56 PM

이 기사에서는 고성능 응용 프로그램을 위해 PHP에서 Swoole의 비동기 I/O 기능을 사용하는 것에 대해 설명합니다. 설치, 서버 설정 및 최적화 전략을 다룹니다. 워드 수 : 159

Swoole의 프로세스 격리를 어떻게 구성합니까?Swoole의 프로세스 격리를 어떻게 구성합니까?Mar 18, 2025 pm 03:55 PM

기사는 Swoole의 프로세스 격리 구성, 개선 된 안정성 및 보안 및 문제 해결 방법과 같은 이점에 대해 논의합니다. 문자 수 : 159

Swoole의 원자로 모델은 어떻게 작동합니까?Swoole의 원자로 모델은 어떻게 작동합니까?Mar 18, 2025 pm 03:54 PM

Swoole의 원자로 모델은 이벤트 중심의 비 블로킹 I/O 아키텍처를 사용하여 다양한 기술을 통해 성능을 최적화하는 고소도 시나리오를 효율적으로 관리합니다 (159 자)

Swoole에서 연결 문제를 해결하려면 어떻게해야합니까?Swoole에서 연결 문제를 해결하려면 어떻게해야합니까?Mar 18, 2025 pm 03:53 PM

기사는 PHP 프레임 워크 인 Swoole의 연결 문제 해결, 원인, 모니터링 및 예방에 대해 논의합니다.

Swoole의 성능을 모니터링하는 데 어떤 도구를 사용할 수 있습니까?Swoole의 성능을 모니터링하는 데 어떤 도구를 사용할 수 있습니까?Mar 18, 2025 pm 03:52 PM

이 기사는 Swoole의 성능 모니터링 및 최적화를위한 도구 및 모범 사례에 대해 설명하고 성능 문제를위한 문제 해결 방법에 대해 설명합니다.

SWOOLE 애플리케이션에서 메모리 누출을 어떻게 해결합니까?SWOOLE 애플리케이션에서 메모리 누출을 어떻게 해결합니까?Mar 18, 2025 pm 03:51 PM

초록 :이 기사에서는 부적절한 자원 관리 및 관리되지 않는 코 루틴과 같은 일반적인 원인을 강조하여 식별, 격리 및 고정을 통해 Swoole 애플리케이션의 메모리 누출 해결에 대해 설명합니다. Swoole 트래커 및 Valgrind와 같은 도구

See all articles

핫 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. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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