Heim Backend-Entwicklung PHP-Tutorial PHP-Websocket-Entwicklungs-Tutorial, Aufbau einer Echtzeit-Fragebogenfunktion

PHP-Websocket-Entwicklungs-Tutorial, Aufbau einer Echtzeit-Fragebogenfunktion

Dec 17, 2023 pm 02:46 PM
php websocket 实时

PHP Websocket开发教程,构建实时问卷调查功能

PHP Websocket-Entwicklungs-Tutorial, Aufbau einer Echtzeit-Fragebogenfunktion, erfordert spezifische Codebeispiele

Websocket-Technologie ist ein neues Netzwerkprotokoll, das Echtzeit-Kommunikationsfunktionen in Webanwendungen erstellen kann. Im Gegensatz zum herkömmlichen HTTP-Protokoll kann das Websocket-Protokoll eine bidirektionale Kommunikation erreichen und Daten ununterbrochen senden und empfangen. In diesem Artikel stellen wir vor, wie man mithilfe der PHP- und Websocket-Technologie eine Echtzeit-Umfragefunktion erstellt, und stellen spezifische Codebeispiele bereit.

  1. Ratchet auf dem Server installieren

Ratchet ist eine PHP-Bibliothek zum Entwickeln von Websocket-Anwendungen. Bevor Sie beginnen, müssen Sie Ratchet auf Ihrem Server installieren. Verwenden Sie den folgenden Befehl:

composer require cboden/ratchet
Nach dem Login kopieren
  1. Schreiben Sie den Websocket-Servercode

Zuerst müssen wir einen Ratchet WebSocket-Server erstellen. In diesem Beispiel werden wir den gesamten Code in eine PHP-Datei einfügen. In dieser Datei erstellen wir eine Klasse, die die Klasse RatchetWebSocketWsServer erweitert. Im Konstruktor initialisieren wir eine Instanzvariable $clients, die die verbundenen Clients speichert. $clients,该变量将存储已连接的客户端。

以下是服务器代码:

<?php

require __DIR__ . '/vendor/autoload.php'; // 引入 ratchet

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetWebSocketWsServer;

class PollServer implements MessageComponentInterface {
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo 'Client ' . $conn->resourceId . ' connected
';
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo 'Client ' . $conn->resourceId . ' disconnected
';
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        echo 'Received message ' . $msg . ' from client ' . $from->resourceId . "
";
        // 在这里处理逻辑...
    }

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

$server = new RatchetApp('localhost', 8080); // 创建一个新的 WebSocket 服务器
$server->route('/poll', new WsServer(new PollServer())); // 定义路由
$server->run(); // 启动服务器
Nach dem Login kopieren

上述代码定义了一个名为 PollServer 的类,该类实现了 RatchetMessageComponentInterface 接口。 MessageComponentInterface 接口非常简单,它只有四个方法,分别是 onOpenonCloseonMessageonError。这些方法会在客户端连接到服务器时、从服务器断开连接时、接收到新消息时和遇到错误时调用。在上面的代码中,我们只是简单地输出了一些日志,但在处理实际逻辑时,你可以根据需要进行更改。

接下来,我们需要将 PollServer 类传递给 RatchetWebSocketWsServer 类的构造函数中。这将创建一个新的 WebSocket 服务器,该服务器将使用 WebSocket 协议与客户端进行通信。

最后,我们需要定义一个路由,以便客户端可以连接到服务器。在上面的代码中,我们定义了一个名为 /poll 的路由。在生产环境中,你应该为 WebSocket 服务器使用真实的域名和端口。

  1. 编写客户端代码

在本示例中,我们将使用 JavaScript 编写客户端代码。首先,在 HTML 文件中添加以下代码来创建一个 WebSocket 连接:

<!DOCTYPE html>
<html>
<head>
    <title>Real-time Poll</title>
</head>
<body>
    <h1>Real-time Poll</h1>
    <script>
        const connection = new WebSocket('ws://localhost:8080/poll'); // 替换为真实的域名和端口

        connection.addEventListener('open', () => {
            console.log('Connected');
        });

        connection.addEventListener('message', event => {
            const message = JSON.parse(event.data);
            console.log('Received', message);
        });

        connection.addEventListener('close', () => {
            console.log('Disconnected');
        });

        connection.addEventListener('error', error => {
            console.error(error);
        });
    </script>
</body>
</html>
Nach dem Login kopieren

上面的代码创建了一个名为 connection 的新 WebSocket 对象,并使用 ws://localhost:8080/poll 作为服务器 URL。在生产环境中,你应该将此 URL 替换为真实的服务器域名和端口。

接下来,我们添加了几个事件侦听器,用于处理连接建立、接收消息、连接断开和错误事件。在接收到消息时,我们使用 JSON.parse 将消息解析为 JavaScript 对象,并在控制台上记录。

  1. 实现实时问卷调查功能

现在我们已经创建了 WebSocket 服务器和客户端,我们需要实现实时问卷调查功能。考虑以下代码示例:

public function onMessage(ConnectionInterface $from, $msg) {
    echo 'Received message ' . $msg . ' from client ' . $from->resourceId . "
";
    $data = json_decode($msg, true);
    switch ($data['action']) {
        case 'vote':
            $vote = $data['vote'];
            $this->broadcast([
                'action' => 'update',
                'votes' => [
                    'yes' => $this->getVoteCount('yes'),
                    'no' => $this->getVoteCount('no')
                ]
            ]);
            break;
    }
}

private function broadcast($message) {
    foreach ($this->clients as $client) {
        $client->send(json_encode($message));
    }
}

private function getVoteCount($option) {
    // 在这里查询投票选项的数量...
}
Nach dem Login kopieren

在上面的代码中,我们在 onMessage 方法中处理客户端发送的消息。此方法对消息进行解码,并使用 switch 语句检查 action 字段。如果 action 等于 vote,则我们将更新投票计数并使用 broadcast 方法向所有客户端发送更新结果。

broadcast 方法中,我们使用一个循环遍历所有客户端并将消息发送到每个客户端。该方法将 JSON 编码的消息发送到客户端,客户端将与 connection.addEventListener('message', ...)

Das Folgende ist der Servercode:
    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use RatchetMessageComponentInterface;
    use RatchetConnectionInterface;
    use RatchetWebSocketWsServer;
    
    class PollServer implements MessageComponentInterface {
        protected $clients;
    
        public function __construct() {
            $this->clients = new SplObjectStorage;
        }
    
        public function onOpen(ConnectionInterface $conn) {
            $this->clients->attach($conn);
            echo 'Client ' . $conn->resourceId . ' connected
    ';
        }
    
        public function onClose(ConnectionInterface $conn) {
            $this->clients->detach($conn);
            echo 'Client ' . $conn->resourceId . ' disconnected
    ';
        }
    
        public function onMessage(ConnectionInterface $from, $msg) {
            echo 'Received message ' . $msg . ' from client ' . $from->resourceId . "
    ";
            $data = json_decode($msg, true);
            switch ($data['action']) {
                case 'vote':
                    $vote = $data['vote'];
                    $this->broadcast([
                        'action' => 'update',
                        'votes' => [
                            'yes' => $this->getVoteCount('yes'),
                            'no' => $this->getVoteCount('no')
                        ]
                    ]);
                    break;
            }
        }
    
        public function onError(ConnectionInterface $conn, Exception $e) {
            echo "An error has occurred: {$e->getMessage()}
    ";
            $conn->close();
        }
    
        private function broadcast($message) {
            foreach ($this->clients as $client) {
                $client->send(json_encode($message));
            }
        }
    
        private function getVoteCount($option) {
            // 在这里查询投票选项的数量...
        }
    }
    
    $server = new RatchetApp('localhost', 8080);
    $server->route('/poll', new WsServer(new PollServer()));
    $server->run();
    Nach dem Login kopieren
  1. Der obige Code definiert eine Klasse mit dem Namen PollServer, die die Schnittstelle RatchetMessageComponentInterface implementiert. Die MessageComponentInterface-Schnittstelle ist sehr einfach. Sie verfügt nur über vier Methoden, nämlich onOpen, onClose, onMessage und onError. Diese Methoden werden aufgerufen, wenn der Client eine Verbindung zum Server herstellt, wenn er die Verbindung zum Server trennt, wenn eine neue Nachricht empfangen wird und wenn ein Fehler auftritt. Im obigen Code geben wir einfach einige Protokolle aus, aber Sie können es bei Bedarf ändern, wenn Sie sich mit der eigentlichen Logik befassen.
Als nächstes müssen wir die Klasse PollServer an den Konstruktor der Klasse RatchetWebSocketWsServer übergeben. Dadurch wird ein neuer WebSocket-Server erstellt, der über das WebSocket-Protokoll mit dem Client kommuniziert.

Abschließend müssen wir eine Route definieren, damit Clients eine Verbindung zum Server herstellen können. Im obigen Code definieren wir eine Route mit dem Namen /poll. In einer Produktionsumgebung sollten Sie den echten Domänennamen und Port für den WebSocket-Server verwenden.

    Clientseitigen Code schreiben

    In diesem Beispiel verwenden wir JavaScript, um clientseitigen Code zu schreiben. Fügen Sie zunächst den folgenden Code in die HTML-Datei ein, um eine WebSocket-Verbindung zu erstellen:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Real-time Poll</title>
    </head>
    <body>
        <h1>Real-time Poll</h1>
        <form>
            <label><input type="radio" name="vote" value="yes"> Yes</label>
            <label><input type="radio" name="vote" value="no"> No</label>
            <button type="submit">Vote</button>
        </form>
        <ul>
            <li>Yes: <span id="yes-votes">0</span></li>
            <li>No: <span id="no-votes">0</span></li>
        </ul>
        <script>
            const connection = new WebSocket('ws://localhost:8080/poll');
    
            connection.addEventListener('open', () => {
                console.log('Connected');
            });
    
            connection.addEventListener('message', event => {
                const message = JSON.parse(event.data);
                if (message.action === 'update') {
                    document.getElementById('yes-votes').textContent = message.votes.yes;
                    document.getElementById('no-votes').textContent = message.votes.no;
                }
            });
    
            connection.addEventListener('close', () => {
                console.log('Disconnected');
            });
    
            connection.addEventListener('error', error => {
                console.error(error);
            });
    
            document.querySelector('form').addEventListener('submit', event => {
                event.preventDefault();
                const vote = document.querySelector('input[name="vote"]:checked').value;
                connection.send(JSON.stringify({
                    action: 'vote',
                    vote: vote
                }));
            });
        </script>
    </body>
    </html>
    Nach dem Login kopieren

    Der obige Code erstellt ein neues WebSocket-Objekt mit dem Namen connection und verwendet ws://localhost: 8080/poll als Server-URL. In einer Produktionsumgebung sollten Sie diese URL durch den echten Serverdomänennamen und -port ersetzen.

      Als nächstes haben wir mehrere Ereignis-Listener hinzugefügt, um Verbindungsaufbau, Nachrichtenempfang, Verbindungstrennung und Fehlerereignisse zu verarbeiten. Wenn eine Nachricht empfangen wird, verwenden wir JSON.parse, um die Nachricht in ein JavaScript-Objekt zu analysieren und auf der Konsole zu protokollieren.
      1. Implementieren Sie die Echtzeit-Fragebogenfunktion

      Da wir nun den WebSocket-Server und -Client erstellt haben, müssen wir die Echtzeit-Fragebogenfunktion implementieren. Betrachten Sie das folgende Codebeispiel: 🎜rrreee🎜Im obigen Code verarbeiten wir die vom Client gesendete Nachricht in der Methode onMessage. Diese Methode dekodiert die Nachricht und überprüft das Feld action mithilfe einer switch-Anweisung. Wenn action gleich vote ist, aktualisieren wir die Stimmenzahl und senden die Aktualisierung mithilfe der Methode broadcast an alle Clients. 🎜🎜Bei der broadcast-Methode verwenden wir eine Schleife, um alle Clients zu durchlaufen und die Nachricht an jeden Client zu senden. Diese Methode sendet eine JSON-codierte Nachricht an den Client, die mit dem im Ereignishandler connection.addEventListener('message', ...) registrierten Ereignishandler verwendet wird. 🎜🎜🎜Vollständige Codebeispiele🎜🎜🎜Hier sind die Vollversionen aller Codebeispiele in diesem Artikel: 🎜🎜server.php: 🎜rrreee🎜index.html: 🎜rrreee🎜Im obigen Codebeispiel haben wir ein einfaches bereitgestellt HTML-Formular, das zum Senden von Abstimmungsergebnissen an den Server verwendet wird. Wenn der Benutzer das Formular absendet, senden wir die Abstimmungsergebnisse als JSON-Objekt an eine WebSocket-Verbindung auf dem Server. 🎜🎜Wir aktualisieren die Abstimmungsergebnisse in HTML, wenn der Kunde die Aktualisierungsnachricht erhält. 🎜🎜🎜Zusammenfassung🎜🎜🎜In diesem Artikel haben wir vorgestellt, wie man mithilfe von PHP und Websocket-Technologie eine Echtzeit-Umfragefunktion erstellt, und spezifische Codebeispiele bereitgestellt. Mithilfe der Websocket-Technologie können verschiedene Echtzeit-Kommunikationsfunktionen wie Chatrooms, Spiele, Echtzeit-Updates usw. implementiert werden. Wenn Sie mehr über die Websocket-Technologie erfahren möchten, empfehlen wir Ihnen, sich die Dokumentation von Ratchet anzusehen, die viele detaillierte Anleitungen und Beispiele zur Websocket-Entwicklung enthält. 🎜

      Das obige ist der detaillierte Inhalt vonPHP-Websocket-Entwicklungs-Tutorial, Aufbau einer Echtzeit-Fragebogenfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    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

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Chat -Befehle und wie man sie benutzt
    1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

    PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

    So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

    Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

    7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

    Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

    Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

    Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

    Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

    JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

    PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

    Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

    Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

    Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

    Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

    Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

    See all articles