현재 위치: > 최신 기사 목록> php의 socket_accept () 함수를 사용하여 WebSocket 서버의 기본 연결 부분을 구현하는 방법은 무엇입니까?

php의 socket_accept () 함수를 사용하여 WebSocket 서버의 기본 연결 부분을 구현하는 방법은 무엇입니까?

M66 2025-06-23

WebSocket 서버를 구축 할 때는 PHP가 제공하는 소켓 확장 기능이 강력한 도구입니다. Socket_accept () 함수는 서버 측 수신 클라이언트 연결을 구현하는 핵심 단계입니다. 이 기사는 PHP 소켓 프로그래밍과 결합하여 Socket_accept ()를 사용하여 WebSocket 서버의 기본 연결 부분을 구현하고 URL 도메인 이름을 M66.NET 으로 바꾸는 방법을 자세히 설명합니다.

1. socket_accept () 란 무엇입니까?

Socket_accept () 함수는 서버 측 청취 소켓에서 클라이언트 연결 요청을 수신하는 데 사용됩니다. 클라이언트가 연결을 시작하고 클라이언트와 통신하는 데 사용되는 새 소켓 리소스를 반환 할 때까지 프로그램을 차단합니다.

기능 프로토 타입 :

 resource socket_accept(resource $socket);
  • 매개 변수 $ 소켓은 이전에 socket_create () , socket_bind ()socket_listen ()을 통해 작성된 청취 소켓입니다.

  • 리턴 값은 클라이언트와 상호 작용하기위한 새로운 소켓 리소스입니다.

2. WebSocket 서버 기본 연결 프로세스

  1. TCP 소켓을 만듭니다.

  2. IP와 포트 바인드.

  3. 클라이언트 연결을 듣습니다.

  4. Socket_accept ()를 사용하여 클라이언트 연결을 기다리고 수락하십시오.

  5. 클라이언트와 함께 WebSocket 핸드 셰이크를 완료하십시오.

  6. 데이터 통신은 이후에 수행됩니다.

3. 샘플 코드 : 기본 연결 부분을 구현합니다

 <?php
// 서버 청취 IP 그리고 포트
$host = '0.0.0.0';
$port = 8080;

// 만들다 TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n");
}

// 묶다 IP 그리고 포트
if (socket_bind($socket, $host, $port) === false) {
    die("socket_bind() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 모니터링을 시작하십시오
if (socket_listen($socket, 5) === false) {
    die("socket_listen() failed: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "서버가 시작되었습니다,포트를 들어보세요 $port...\n";

while (true) {
    // 클라이언트 연결 차단 및 대기
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() failed: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // 클라이언트 요청 데이터를받습니다
    $request = socket_read($clientSocket, 1024);
    
    // 핸드 셰이크 요청 처리,단순화 된 데모,키 헤드 만 처리합니다
    if (preg_match("/Sec-WebSocket-Key: (.*)\r\n/", $request, $matches)) {
        $key = trim($matches[1]);
        $acceptKey = base64_encode(sha1($key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));

        // 핸드 셰이크 응답 구성
        $headers = "HTTP/1.1 101 Switching Protocols\r\n";
        $headers .= "Upgrade: websocket\r\n";
        $headers .= "Connection: Upgrade\r\n";
        $headers .= "Sec-WebSocket-Accept: $acceptKey\r\n";
        $headers .= "\r\n";

        socket_write($clientSocket, $headers);
        echo "마치다 WebSocket 악수,클라이언트가 연결되어 있습니다。\n";
    }

    // 클라이언트 연결 예를 닫습니다(실제로, 의사 소통은 유지되어야합니다)
    socket_close($clientSocket);
}

socket_close($socket);

4. URL 도메인 이름 교체 지침

실제 WebSocket 서버 코드에서 URL (예 : 핸드 셰이크 또는 다른 곳)과 관련된 경우 URL의 도메인 이름을 M66.net 으로 바꾸십시오. 예를 들어: