


PHP-Websocket-Entwicklungs-Tutorial, Aufbau einer Echtzeit-Fragebogenfunktion
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.
- 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
- 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(); // 启动服务器
上述代码定义了一个名为 PollServer
的类,该类实现了 RatchetMessageComponentInterface
接口。 MessageComponentInterface
接口非常简单,它只有四个方法,分别是 onOpen
、onClose
、onMessage
和 onError
。这些方法会在客户端连接到服务器时、从服务器断开连接时、接收到新消息时和遇到错误时调用。在上面的代码中,我们只是简单地输出了一些日志,但在处理实际逻辑时,你可以根据需要进行更改。
接下来,我们需要将 PollServer
类传递给 RatchetWebSocketWsServer
类的构造函数中。这将创建一个新的 WebSocket 服务器,该服务器将使用 WebSocket 协议与客户端进行通信。
最后,我们需要定义一个路由,以便客户端可以连接到服务器。在上面的代码中,我们定义了一个名为 /poll
的路由。在生产环境中,你应该为 WebSocket 服务器使用真实的域名和端口。
- 编写客户端代码
在本示例中,我们将使用 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>
上面的代码创建了一个名为 connection
的新 WebSocket 对象,并使用 ws://localhost:8080/poll
作为服务器 URL。在生产环境中,你应该将此 URL 替换为真实的服务器域名和端口。
接下来,我们添加了几个事件侦听器,用于处理连接建立、接收消息、连接断开和错误事件。在接收到消息时,我们使用 JSON.parse
将消息解析为 JavaScript 对象,并在控制台上记录。
- 实现实时问卷调查功能
现在我们已经创建了 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) { // 在这里查询投票选项的数量... }
在上面的代码中,我们在 onMessage
方法中处理客户端发送的消息。此方法对消息进行解码,并使用 switch
语句检查 action
字段。如果 action
等于 vote
,则我们将更新投票计数并使用 broadcast
方法向所有客户端发送更新结果。
在 broadcast
方法中,我们使用一个循环遍历所有客户端并将消息发送到每个客户端。该方法将 JSON 编码的消息发送到客户端,客户端将与 connection.addEventListener('message', ...)
- Der obige Code definiert eine Klasse mit dem Namen
PollServer
, die die SchnittstelleRatchetMessageComponentInterface
implementiert. DieMessageComponentInterface
-Schnittstelle ist sehr einfach. Sie verfügt nur über vier Methoden, nämlichonOpen
,onClose
,onMessage
undonError
. 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.
<?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();
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>
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. 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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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

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

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

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.

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

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 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.
