실시간 푸시 기능을 구현하기 위해 PHP를 사용하여 Websocket을 개발합니다.

王林
풀어 주다: 2023-12-02 12:46:02
원래의
843명이 탐색했습니다.

실시간 푸시 기능을 구현하기 위해 PHP를 사용하여 Websocket을 개발합니다.

제목: PHP를 사용하여 Websocket을 개발하여 실시간 푸시 기능 구현

Websocket은 TCP 프로토콜 기반의 통신 프로토콜로, 웹 개발에서 Websocket을 사용하여 실시간 푸시 기능을 구현할 수 있습니다. 통신 또는 데이터의 실시간 업데이트가 필요합니다. 이 기사에서는 PHP 언어를 사용하여 Websocket 서버를 개발하고 구체적인 코드 예제를 제공합니다.

1. 개요

Websocket은 기존 HTTP 프로토콜과 비교하여 실시간 통신 시나리오에 더 적합합니다. Websocket 프로토콜의 기능은 다음과 같습니다.

  1. 전이중 통신을 지원하고 동시에 데이터를 보내고 받을 수 있습니다.
  2. HTTP 프로토콜과 호환되고 연결 설정을 위해 HTTP와 유사한 핸드셰이크 프로토콜을 사용하며 HTTP/HTTPS 포트를 통해 통신할 수 있습니다.
  3. 요청-응답 주기를 기다리지 않고 언제든지 데이터를 보낼 수 있습니다.
  4. 도메인 간 통신을 지원하며 다양한 도메인 이름으로 통신할 수 있습니다.

2. 개발 환경 준비

개발을 시작하기 전에 몇 가지 도구와 환경을 준비해야 합니다.

  1. PHP 설치: 시스템에 PHP 인터프리터가 설치되어 있는지 확인하세요.
  2. Composer 설치: Composer는 Websocket 관련 라이브러리를 설치하는 데 사용되는 PHP용 종속성 관리 도구입니다.
  3. 편집기 선택: VS Code, Sublime Text 등 개발에 원하는 편집기를 선택할 수 있습니다.

3. Websocket 라이브러리 설치

PHP에는 선택할 수 있는 성숙한 Websocket 라이브러리가 많이 있으며 그중 가장 일반적으로 사용되는 라이브러리는 Ratchet, Swoole 등입니다. 이번 글에서는 개발을 위해 Ratchet을 사용하겠습니다.

  1. 프로젝트 루트 디렉터리에 composer.json 파일을 만들고 다음 콘텐츠를 추가합니다. composer.json文件,并添加以下内容:
{
    "require": {
        "cboden/ratchet": "^0.4"
    }
}
로그인 후 복사
  1. 打开终端,切换到项目根目录,执行以下命令安装Ratchet库:
composer install
로그인 후 복사

四、编写Websocket服务器代码

在创建Websocket服务器之前,我们先来讨论一下Websocket的工作流程。

  1. 连接建立:客户端与服务器建立Websocket连接,客户端发送一个HTTP请求,服务器返回一个协议切换的响应,建立连接。
  2. 消息传输:双方可以通过send方法发送消息,并通过onMessage事件接收消息。
  3. 连接关闭:客户端或服务器端任意一方发送关闭帧来关闭连接。

下面是一个使用Ratchet库编写Websocket服务器的示例代码:

<?php

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

require 'vendor/autoload.php';

class MyWebSocket 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 closed: {$conn->resourceId}
";
    }

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

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

$server->run();
로그인 후 복사

以上代码定义了一个MyWebSocket类,实现了MessageComponentInterface接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen事件中,我们将新建立的连接加入到$clients集合中;在onMessage事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose事件中,我们从$clients集合中删除关闭的连接;在onError

php server.php
로그인 후 복사

    터미널을 열고 프로젝트 루트 디렉터리로 전환합니다. 그리고 다음 명령을 실행하여 Ratchet 라이브러리를 설치합니다.

    New connection: 1
    New connection: 2
    Message received: Hello from client 1
    Message received: Hello from client 2
    Connection closed: 1
    로그인 후 복사

    4. Websocket 서버 코드 작성

    Websocket 서버를 생성하기 전에 먼저 Websocket의 작업 흐름을 살펴보겠습니다.

    연결 설정: 클라이언트는 서버와 Websocket 연결을 설정하고, 서버는 연결을 설정하기 위해 프로토콜 전환 응답을 반환합니다.

    메시지 전송: 양측 모두 send 메소드를 통해 메시지를 보내고 onMessage 이벤트를 통해 메시지를 받을 수 있습니다.

    연결 종료: 클라이언트나 서버가 연결을 종료하기 위해 닫기 프레임을 보냅니다.

    다음은 Ratchet 라이브러리를 사용하여 Websocket 서버를 작성하기 위한 샘플 코드입니다. 🎜
    <!DOCTYPE html>
    <html>
    <head>
        <title>Websocket Client</title>
        <script>
            var socket = new WebSocket("ws://localhost:8080");
    
            socket.onopen = function() {
                console.log("Connected");
            };
    
            socket.onmessage = function(event) {
                console.log("Message received: " + event.data);
            };
    
            socket.onclose = function(event) {
                console.log("Connection closed");
            };
    
            function sendMessage() {
                var message = document.getElementById("message").value;
                socket.send(message);
            }
        </script>
    </head>
    <body>
        <input type="text" id="message">
        <button onclick="sendMessage()">Send</button>
    </body>
    </html>
    로그인 후 복사
    🎜위 코드는 MessageComponentInterface의 메서드를 구현하는 MyWebSocket 클래스를 정의합니다. > 인터페이스. 연결, 메시지, 닫기 및 오류 이벤트를 처리하는 데 사용됩니다. onOpen 이벤트에서는 onMessage 이벤트의 $clients 컬렉션에 새로 설정된 연결을 추가하고 모든 연결을 순회하고 메시지를 보냅니다. 다른 클라이언트에 대해서는 onClose 이벤트에서 $clients 컬렉션에서 닫힌 연결을 삭제하고 예외를 처리합니다. 연결을 닫습니다. 🎜🎜5. Websocket 서버 실행🎜🎜터미널에서 프로젝트 루트 디렉터리로 전환하고 다음 명령을 실행하여 Websocket 서버를 시작합니다.🎜rrreee🎜모든 것이 정상이면 다음과 유사한 출력이 표시됩니다.🎜rrreee🎜 6. 클라이언트 코드 작성🎜🎜마지막으로 테스트용 클라이언트를 작성해야 합니다. 🎜rrreee🎜이 예에서는 JavaScript를 사용하여 Websocket 연결을 생성하고 연결이 설정되고 메시지가 수신되고 연결이 닫힐 때 해당 로그를 인쇄합니다. 페이지에는 메시지를 보내기 위한 입력 상자와 보내기 버튼이 제공됩니다. 🎜🎜7. 요약🎜🎜본 글에서는 PHP를 이용하여 Websocket 서버를 개발하는 방법을 소개하고, 독자들이 Websocket의 작동 원리와 사용법을 이해할 수 있도록 구체적인 코드 예제를 제공합니다. Websocket은 실시간 통신 기능을 갖추고 있으며 실시간 푸시, 채팅방, 멀티플레이어 게임 및 기타 시나리오를 구현하는 데 사용할 수 있습니다. 이 기사가 도움이 되기를 바랍니다. 🎜

    위 내용은 실시간 푸시 기능을 구현하기 위해 PHP를 사용하여 Websocket을 개발합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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