>백엔드 개발 >PHP 튜토리얼 >PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션을 구현하는 방법

PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션을 구현하는 방법

王林
王林원래의
2023-06-17 13:04:401571검색

인터넷 기술의 발달로 실시간 웹 애플리케이션이 점점 더 대중화되는 개발 방식이 되었습니다. 전이중 통신 프로토콜인 WebSocket은 실시간 웹 애플리케이션을 구현하는 중요한 방법이 되었습니다. PHP는 개발자의 사용을 용이하게 하기 위해 WebSocket API도 제공합니다. 이 기사에서는 PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션을 구현하는 방법을 소개합니다.

1. WebSocket 개요

WebSocket은 단일 TCP 연결을 통해 전이중 통신을 제공하는 프로토콜로, 웹 애플리케이션이 클라이언트와 서버 간에 실시간 데이터를 통신할 수 있게 해줍니다. HTTP 프로토콜과 비교하여 WebSocket은 데이터 전송 시 대기 시간이 짧고 핸드셰이크가 적으므로 더 많은 실시간 웹 애플리케이션을 사용할 수 있습니다.

2. PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션 구현

  1. WebSocket 설치

PHP WebSocket은 ReactPHP를 기반으로 하므로 먼저 ReactPHP를 설치해야 합니다.

composer require react/socket:^1.11.0 react/event-loop:^1.1.0
  1. WebSocket 서비스 만들기

The 다음은 간단한 PHP WebSocket 서비스 코드입니다.

use ReactSocketConnectionInterface;
use ReactSocketServer;

require __DIR__ . '/vendor/autoload.php';

$loop = ReactEventLoopFactory::create();
$socket = new Server('localhost:8080', $loop);

$clients = new SplObjectStorage();
$socket->on('connection', function (ConnectionInterface $conn) use ($clients) {
    $clients->attach($conn);
    $conn->on('data', function ($data) use ($clients, $conn) {
        foreach ($clients as $client) {
            if ($conn !== $client) {
                $client->write($data);
            }
        }
    });
    $conn->on('close', function () use ($clients, $conn) {
        $clients->detach($conn);
    });
});

$loop->run();

이 코드는 로컬 시스템의 8080 포트를 수신하는 WebSocket 서비스를 생성합니다. 클라이언트가 연결되면 클라이언트 개체를 SplObjectStorage 개체에 저장합니다. 데이터 전송이 있는 경우 보낸 사람을 제외한 다른 클라이언트에게 데이터를 전송합니다. 클라이언트 연결이 끊어지면 SplObjectStorage에서 클라이언트 개체를 삭제합니다.

  1. WebSocket 서비스 실행

위 코드를 server.php 파일로 저장하고 php server.php 명령을 실행하여 WebSocket 서비스를 시작하세요. 이 시점에서 WebSocket 서비스는 이미 로컬 포트 ​​8080에서 실행 중이며 클라이언트 연결을 수락할 수 있습니다. server.php文件,运行命令php server.php启动WebSocket服务。此时,WebSocket服务已经在本机的8080端口上运行,并且可以接受客户端连接。

  1. 创建WebSocket客户端

下面是一个简单的PHP WebSocket客户端代码:

use ReactEventLoopFactory;
use ReactSocketConnector;
use ReactSocketConnectionInterface;

require __DIR__ . '/vendor/autoload.php';

$loop = Factory::create();
$connector = new Connector($loop);

$connector->connect('tcp://127.0.0.1:8080')->then(function (ConnectionInterface $conn) use ($loop) {
    $conn->on('data', function ($data) {
        echo $data;
    });
    $loop->addReadStream(STDIN, function () use ($conn) {
        $line = fgets(STDIN);
        $conn->write($line);
    });
}, function (Exception $e) {
    echo 'Could not connect: ' . $e->getMessage() . PHP_EOL;
});

$loop->run();

该代码创建了一个WebSocket客户端,连接到本机的8080端口。当有数据传输时,将数据输出到控制台上。当读取控制台输入时,将输入传输给WebSocket服务端。

  1. 运行WebSocket客户端

保存上述代码为client.php文件,运行命令php client.php启动WebSocket客户端。此时,WebSocket客户端已经连接到本机的WebSocket服务器。

  1. 测试WebSocket通信

在控制台中输入数据,数据将会被发送给WebSocket服务端,服务端将数据回传给除发送者外的其他客户端。我们可以打开多个控制台运行php client.php

    WebSocket 클라이언트 생성

    다음은 간단한 PHP WebSocket 클라이언트 코드입니다.

    rrreee🎜이 코드는 WebSocket 클라이언트를 생성하고 로컬 시스템의 8080 포트에 연결합니다. 데이터 전송이 있으면 데이터가 콘솔로 출력됩니다. 콘솔 입력을 읽을 때 입력을 WebSocket 서버로 전송합니다. 🎜
      🎜WebSocket 클라이언트 실행🎜🎜🎜위 코드를 client.php 파일로 저장하고 php client.php 명령을 실행하여 WebSocket 클라이언트를 시작합니다. 이 시점에서 WebSocket 클라이언트는 로컬 WebSocket 서버에 연결되었습니다. 🎜
        🎜WebSocket 통신 테스트🎜🎜🎜콘솔에 데이터를 입력하면 데이터가 WebSocket 서버로 전송되고 서버는 발신자를 제외한 다른 클라이언트로 데이터를 다시 보냅니다. 여러 콘솔을 열고 php client.php를 실행하여 실시간 통신 효과를 테스트할 수 있습니다. 🎜🎜3. 요약🎜🎜WebSocket API는 PHP가 실시간 웹 애플리케이션을 쉽게 구현할 수 있는 WebSocket을 구현하는 방법을 제공합니다. 이 기사에서는 PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션을 구현하는 방법을 소개합니다. WebSocket의 개요, WebSocket 서비스 생성, WebSocket 클라이언트 생성 및 WebSocket 통신 테스트를 다룹니다. 🎜

위 내용은 PHP에서 WebSocket API를 사용하여 실시간 웹 애플리케이션을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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