Verwenden Sie PHP, um Websocket zu entwickeln und eine Echtzeit-Push-Funktion zu implementieren

王林
Freigeben: 2023-12-02 12:46:02
Original
843 Leute haben es durchsucht

Verwenden Sie PHP, um Websocket zu entwickeln und eine Echtzeit-Push-Funktion zu implementieren

Titel: Verwenden Sie PHP, um Websocket zu entwickeln und eine Echtzeit-Push-Funktion zu implementieren.

Websocket ist ein Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert. In der Webentwicklung kann Websocket zur Implementierung einer Echtzeit-Push-Funktion verwendet werden, um Echtzeit zu erreichen Kommunikation oder Echtzeitaktualisierung von Daten erforderlich. In diesem Artikel entwickeln wir einen Websocket-Server mithilfe der PHP-Sprache und stellen spezifische Codebeispiele bereit.

1. Übersicht: Websocket ist ein Vollduplex-Kommunikationsprotokoll. Im Vergleich zum herkömmlichen HTTP-Protokoll eignet sich Websocket besser für Echtzeit-Kommunikationsszenarien. Zu den Funktionen des Websocket-Protokolls gehören:

Unterstützt Vollduplex-Kommunikation und kann Daten gleichzeitig senden und empfangen.
  1. Kompatibel mit dem HTTP-Protokoll, verwendet HTTP-ähnliches Handshake-Protokoll für den Verbindungsaufbau und kann über den HTTP/HTTPS-Port kommunizieren.
  2. Daten können jederzeit gesendet werden, ohne auf den Anfrage-Antwort-Zyklus warten zu müssen.
  3. Unterstützt domänenübergreifende Kommunikation und kann unter verschiedenen Domänennamen kommunizieren.
  4. 2. Vorbereitung der Entwicklungsumgebung

Bevor Sie mit der Entwicklung beginnen, müssen Sie einige Tools und Umgebung vorbereiten:

PHP installieren: Stellen Sie sicher, dass der PHP-Interpreter auf Ihrem System installiert ist.
  1. Composer installieren: Composer ist ein Abhängigkeitsverwaltungstool für PHP. Wir werden es verwenden, um Websocket-bezogene Bibliotheken zu installieren.
  2. Wählen Sie einen Editor: Sie können einen beliebigen Editor für die Entwicklung auswählen, z. B. VS Code, Sublime Text usw.
  3. 3. Installieren Sie die Websocket-Bibliothek

In PHP stehen viele ausgereifte Websocket-Bibliotheken zur Auswahl, darunter Ratchet, Swoole usw. In diesem Artikel verwenden wir Ratchet für die Entwicklung.

Erstellen Sie eine composer.json-Datei im Projektstammverzeichnis und fügen Sie den folgenden Inhalt hinzu:
  1. {
        "require": {
            "cboden/ratchet": "^0.4"
        }
    }
    Nach dem Login kopieren
      composer.json文件,并添加以下内容:
    composer install
    Nach dem Login kopieren
    1. 打开终端,切换到项目根目录,执行以下命令安装Ratchet库:
    <?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();
    Nach dem Login kopieren

    四、编写Websocket服务器代码

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

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

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

    php server.php
    Nach dem Login kopieren

    以上代码定义了一个MyWebSocket类,实现了MessageComponentInterface接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen事件中,我们将新建立的连接加入到$clients集合中;在onMessage事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose事件中,我们从$clients集合中删除关闭的连接;在onErrorÖffnen Sie das Terminal, wechseln Sie zum Projektstammverzeichnis, und führen Sie den folgenden Befehl aus, um die Ratchet-Bibliothek zu installieren:

    New connection: 1
    New connection: 2
    Message received: Hello from client 1
    Message received: Hello from client 2
    Connection closed: 1
    Nach dem Login kopieren

    4. Schreiben Sie den Websocket-Servercode

    Bevor wir den Websocket-Server erstellen, besprechen wir zunächst den Arbeitsablauf von Websocket.

    Verbindungsaufbau: Der Client stellt eine Websocket-Verbindung mit dem Server her. Der Client sendet eine HTTP-Anfrage und der Server gibt eine Protokollwechselantwort zurück, um die Verbindung herzustellen.

    Nachrichtenübertragung: Beide Parteien können Nachrichten über die Methode send senden und Nachrichten über das Ereignis onMessage empfangen.

    Verbindungsschluss: Entweder der Client oder der Server sendet einen Schließrahmen, um die Verbindung zu schließen.

    Das Folgende ist ein Beispielcode zum Schreiben eines Websocket-Servers mithilfe der Ratchet-Bibliothek:

    <!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>
    Nach dem Login kopieren
    Der obige Code definiert eine MyWebSocket-Klasse, die die Methoden im MessageComponentInterfaceimplementiert > Schnittstelle. Zur Verarbeitung von Verbindungs-, Nachrichten-, Schließ- und Fehlerereignissen. Im onOpen-Ereignis fügen wir die neu hergestellte Verbindung zur $clients-Sammlung hinzu, im onMessage-Ereignis durchlaufen wir alle Verbindungen und senden Nachrichten an andere Clients; im onClose-Ereignis löschen wir die geschlossene Verbindung aus der $clients-Ereignis. Wir behandeln die Ausnahme und schließen Sie die Verbindung. 🎜🎜5. Führen Sie den Websocket-Server aus. Wechseln Sie zum Projektstammverzeichnis im Terminal und führen Sie den folgenden Befehl aus, um den Websocket-Server zu starten: 🎜rrreee 6. Schreiben Sie den Client-Code🎜🎜Schließlich müssen wir auch einen Client zum Testen schreiben. 🎜rrreee🎜In diesem Beispiel verwenden wir JavaScript, um eine Websocket-Verbindung zu erstellen und die entsprechenden Protokolle zu drucken, wenn die Verbindung hergestellt, Nachrichten empfangen und die Verbindung geschlossen wird. Auf der Seite stellen wir ein Eingabefeld und einen Senden-Button zum Versenden von Nachrichten zur Verfügung. 🎜🎜7. Zusammenfassung🎜🎜Dieser Artikel stellt die Methode zur Entwicklung eines Websocket-Servers mit PHP vor und bietet spezifische Codebeispiele, um den Lesern das Verständnis des Funktionsprinzips und der Verwendung von Websocket zu erleichtern. Websocket verfügt über Echtzeit-Kommunikationsfunktionen und kann zur Implementierung von Echtzeit-Push, Chatrooms, Multiplayer-Spielen und anderen Szenarien verwendet werden. Ich hoffe, dieser Artikel wird Ihnen hilfreich sein. 🎜

Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um Websocket zu entwickeln und eine Echtzeit-Push-Funktion zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!