> 백엔드 개발 > PHP 튜토리얼 > `socket_*` 함수를 사용하여 PHP에서 WebSocket 서버를 구축하는 방법은 무엇입니까?

`socket_*` 함수를 사용하여 PHP에서 WebSocket 서버를 구축하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-28 05:28:10
원래의
283명이 탐색했습니다.

How to Build a WebSocket Server in PHP Using `socket_*` Functions?

PHP에서 WebSocket 서버를 만드는 방법

WebSocket은 웹 클라이언트와 웹 서버 간의 전이중 통신을 가능하게 하는 기술입니다. 이를 통해 실시간 데이터 전송이 가능하므로 온라인 게임, 인스턴트 메시징, 금융 데이터 스트리밍과 같은 애플리케이션에 이상적입니다.

오래된 코드

질문에 언급된 phpwebsockets 라이브러리는 실제로 오래되었으며 최신 WebSocket 프로토콜을 지원하지 않습니다. 또한, 업데이트하면 의도한 대로 작동하지 않을 수 있습니다.

WebSocket 서버 생성

  1. 소켓 생성: 소켓_create() 함수를 사용하여 마스터 소켓을 생성합니다.
  2. 소켓 바인딩: 소켓을 특정 IP 주소 및 포트에 바인딩 usingsocket_bind().
  3. 소켓 수신: 소켓_listen()을 사용하여 들어오는 연결을 수신하도록 소켓을 설정합니다.
  4. 연결 수락: 소켓_accept 사용 () 들어오는 연결을 수락하고 새 클라이언트를 생성합니다. 소켓.

핸드셰이크 절차

  1. 요청 수신: 소켓_recv()를 사용하여 클라이언트로부터 핸드셰이크 요청을 받습니다.
  2. 헤더 구문 분석: 핸드셰이크 요청을 구문 분석하여 다음과 같은 필수 헤더를 얻습니다. Sec-WebSocket-Key.
  3. 승인 키 생성: 제공된 Sec-WebSocket-Key를 기반으로 승인 키를 계산합니다.
  4. 응답 보내기 : 계산된 수락을 포함하여 핸드셰이크 응답을 클라이언트에 보냅니다. key.

메시지 처리

  1. 데이터 수신: 클라이언트로부터 메시지를 받으려면 소켓_recv()를 사용하세요.
  2. 데이터 디코딩: WebSocket을 사용하여 인코딩된 경우 수신된 메시지를 디코딩합니다. 프레이밍 프로토콜.
  3. 요청 처리: 클라이언트의 요청을 처리하고 적절한 응답을 보냅니다.

클라이언트-서버 상호 작용

  1. 클라이언트 연결: 클라이언트 측에서는 JavaScript의 WebSocket 객체를 사용하여 WebSocket 서버에 연결합니다.
  2. 데이터 보내기: send()를 사용하여 클라이언트에서 서버로 데이터를 보냅니다.
  3. 데이터 받기: 열기, 오류 및 메시지에 대한 이벤트 리스너를 설정하여

구현 예

다음은 간단한 WebSocket 서버에 대한 PHP 코드 조각의 예입니다.

<?php
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($master, 'localhost', 12345);
socket_listen($master, 20);

$sockets = array($master);
$users = array();
$debug = false;

while (true) {
    $changed = $sockets;
    socket_select($changed, $write = NULL, $except = NULL, NULL);

    foreach ($changed as $socket) {
        if ($socket == $master) {
            $client = socket_accept($master);
            if ($client < 0) {
                console("socket_accept() failed");
                continue;
            } else {
                connect($client);
            }
        } else {
            $bytes = @socket_recv($socket, $buffer, 2048, 0);
            if ($bytes == 0) {
                disconnect($socket);
            } else {
                $user = getuserbysocket($socket);
                if (!$user->handshake) {
                    dohandshake($user, $buffer);
                } else {
                    process($user, $buffer);
                }
            }
        }
    }
}
로그인 후 복사

이 코드 뼈대는 위에서 설명한 단계를 보여줍니다. 마스터 소켓 생성 및 수신, 들어오는 연결 수락, WebSocket 핸드셰이크 수행, 클라이언트 메시지 처리 등이 포함됩니다. 전체 스크립트는 앞에서 설명한 connect(), Disconnect() 및 process()와 같은 나머지 함수로 보완되어야 합니다.

위 내용은 `socket_*` 함수를 사용하여 PHP에서 WebSocket 서버를 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿