>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 Websocket을 개발하여 인스턴트 채팅 기능 구현

PHP를 사용하여 Websocket을 개발하여 인스턴트 채팅 기능 구현

WBOY
WBOY원래의
2023-12-02 13:28:091372검색

PHP를 사용하여 Websocket을 개발하여 인스턴트 채팅 기능 구현

PHP를 사용하여 Websocket을 개발하여 인스턴트 채팅 기능 구현

Websocket은 인스턴트 채팅, 실시간 데이터 업데이트 등과 같은 실시간 통신 시나리오에 적합한 전이중 통신 프로토콜입니다. 널리 사용되는 서버 측 프로그래밍 언어인 PHP는 관련 라이브러리 및 확장을 통해 웹소켓 기능을 구현할 수도 있습니다. 이번 글에서는 PHP를 사용하여 Websocket을 개발하는 방법을 소개하겠습니다. 구체적인 코드 예시는 다음과 같습니다.

먼저 서버가 Websocket 프로토콜을 지원하는지 확인해야 합니다. PHP에서는 Ratchet 라이브러리를 사용하여 Websocket 서버를 구현할 수 있습니다. Ratchet은 간단하고 유연한 작업 인터페이스를 제공하는 ReactPHP 기반의 라이브러리입니다.

  1. Ratchet 라이브러리 설치

Composer를 사용하여 다음 명령을 통해 프로젝트 디렉터리에서 실행할 수 있는 Ratchet 라이브러리를 설치합니다.

composer require cboden/ratchet
  1. Websocket 서버 만들기

server.php라는 파일을 만듭니다 프로젝트 파일의 루트 디렉터리를 입력하고 다음 코드를 작성합니다.

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

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class Chat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "An error occurred: {$e->getMessage()}
";
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

echo "Server running at http://localhost:8080
";

$server->run();
  1. Websocket 서버 시작

명령줄에 프로젝트 루트 디렉터리를 입력하고 다음 명령을 실행하여 Websocket 서버를 시작합니다.

php -f server.php

이 시점에서 , Websocket 서버가 시작되었으며 포트 8080에서 수신 대기 중입니다. http://localhost:8080을 통해 접속할 수 있습니다.

  1. 프런트엔드 페이지 작성

프로젝트 디렉터리에 index.html 파일을 생성하고 다음 코드를 작성하세요.

<!DOCTYPE html>
<html>
<head>
    <title>Websocket Chat</title>
    <script>
        var socket = new WebSocket("ws://localhost:8080");

        socket.onopen = function(event) {
            console.log("Socket opened");
        };

        socket.onmessage = function(event) {
            console.log("Message received: " + event.data);
        };

        socket.onclose = function(event) {
            console.log("Socket closed");
        };

        function sendMessage() {
            var message = document.getElementById("message").value;
            socket.send(message);
        }
    </script>
</head>
<body>
    <input type="text" id="message" placeholder="Type a message">
    <button onclick="sendMessage()">Send</button>
</body>
</html>

index.html 파일을 브라우저에서 열면 메시지를 보낼 수 있는 파일이 보입니다. 입력 상자와 버튼. 입력창에 메시지를 입력하고 보내기 버튼을 클릭하면 해당 메시지가 서버로 전송됩니다.

  1. 프로그램 테스트

여러 브라우저 창이나 탭을 열고 각각 다른 메시지를 입력한 다음 보내기 버튼을 클릭하세요. 연결된 모든 클라이언트에게 메시지가 브로드캐스트되는 것을 확인할 수 있습니다.

이 시점에서 우리는 PHP를 사용하여 인스턴트 채팅 기능을 구현하는 간단한 Websocket 서버를 성공적으로 개발했습니다. Ratchet 라이브러리의 캡슐화를 통해 복잡한 웹소켓 애플리케이션을 빠르게 구현할 수 있습니다. 이 글이 여러분에게 도움이 되기를 바라며, 행복한 프로그래밍을 하시길 바랍니다!

위 내용은 PHP를 사용하여 Websocket을 개발하여 인스턴트 채팅 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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