Aktueller Standort: Startseite> Neueste Artikel> So kommunizieren Sie in Echtzeit mit WebSocket -Protokoll über PHP

So kommunizieren Sie in Echtzeit mit WebSocket -Protokoll über PHP

M66 2025-06-07

So kommunizieren Sie in Echtzeit mit WebSocket -Protokoll über PHP

Mit der Entwicklung von Webanwendungen ist die Echtzeitkommunikation für Online-Chat, Börsenmärkte und andere Szenarien von entscheidender Bedeutung geworden. Mit dem WebSocket-Protokoll können Browser und Server kontinuierliche Zwei-Wege-Verbindungen herstellen und einen effizienten Echtzeit-Datenaustausch ermöglichen. In diesem Artikel wird vorgestellt, wie das PHP- und WebSocket-Protokoll verwendet wird, um die Echtzeitkommunikation zu vervollständigen und diese durch Codebeispiele zu demonstrieren.

1. Einführung in die Websocket -Vereinbarung

Das WebSocket -Protokoll basiert auf dem TCP -Protokoll und unterstützt die vollständige Duplex -Kommunikation. Im Vergleich zu herkömmlichem HTTP kann WebSocket Server ermöglichen, Daten aktiv zu überschreiten, und Clients können sofort reagieren. Zu den Hauptmerkmalen gehören:

  1. Echtzeit-Zwei-Wege-Kommunikation: Es sind keine Kundenabfragen erforderlich, Server und Kunden können in Echtzeit interagieren.
  2. Niedrige Kommunikationsaufwand: Der Paketkopf ist kleiner und spart Bandbreitenressourcen.
  3. Überlegene Leistung: Halten Sie lange Verbindungen auf, verringern Sie die Anzahl der Händedrucke und verbessern Sie die Reaktionsgeschwindigkeit.

2. Einführung in die PHP WebSocket -Erweiterung

Obwohl PHP WebSocket nicht direkt unterstützt, können verwandte Funktionen über die Erweiterungsbibliothek implementiert werden. Häufig verwendete Erweiterungen sind:

  1. Ratchet: Leichte WebSocket -Bibliothek unterstützt Server und Client.
  2. SWOOLE: Hochleistungsnetzwerk-Kommunikationsbibliothek, unterstützt mehrere Protokolle.
  3. WorkerMan: Multi-Thread-Socket-Framework unterstützt WebSocket-Server und Client.

In diesem Artikel wird die Ratchet -Erweiterung als Beispiel verwendet, um den Implementierungsprozess der Websocket -Kommunikation zu demonstrieren.

3. Die Ratschenverlängerung installieren

Ratchet über Komponist installieren:

 <span class="fun">Der Komponist benötigt Cboden/Ratchet</span>

4. Erstellen Sie einen WebSocket -Server

Das folgende Beispiel zeigt einen einfachen Server, der Nachrichten und Sendungen an alle verbundenen Clients empfängt:

 <?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
<p>require 'vendor/autoload.php';</p>
<p>class MyWebSocketServer implements MessageComponentInterface {<br>
protected $clients;</p>
<pre class="overflow-visible!"><div class="contain-inline-size rounded-2xl border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary"><div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-2xl">php</div><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><button class="flex gap-1 items-center select-none py-1" aria-label="Kopie"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-xs"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 5C7 3.34315 8.34315 2 10 2H19C20.6569 2 22 3.34315 22 5V14C22 15.6569 20.6569 17 19 17H17V19C17 20.6569 15.6569 22 14 22H5C3.34315 22 2 20.6569 2 19V10C2 8.34315 3.34315 7 5 7H7V5ZM9 7H14C15.6569 7 17 8.34315 17 10V15H19C19.5523 15 20 14.5523 20 14V5C20 4.44772 19.5523 4 19 4H10C9.44772 4 9 4.44772 9 5V7ZM5 9C4.44772 9 4 9.44772 4 10V19C4 19.5523 4.44772 20 5 20H14C14.5523 20 15 19.5523 15 19V10C15 9.44772 14.5523 9 14 9H5Z" fill="currentColor"></path></svg>Kopie</button><button class="flex items-center gap-1 py-1 select-none"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-xs"><path d="M2.5 5.5C4.3 5.2 5.2 4 5.5 2.5C5.8 4 6.7 5.2 8.5 5.5C6.7 5.8 5.8 7 5.5 8.5C5.2 7 4.3 5.8 2.5 5.5Z" fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M5.66282 16.5231L5.18413 19.3952C5.12203 19.7678 5.09098 19.9541 5.14876 20.0888C5.19933 20.2067 5.29328 20.3007 5.41118 20.3512C5.54589 20.409 5.73218 20.378 6.10476 20.3159L8.97693 19.8372C9.72813 19.712 10.1037 19.6494 10.4542 19.521C10.7652 19.407 11.0608 19.2549 11.3343 19.068C11.6425 18.8575 11.9118 18.5882 12.4503 18.0497L20 10.5C21.3807 9.11929 21.3807 6.88071 20 5.5C18.6193 4.11929 16.3807 4.11929 15 5.5L7.45026 13.0497C6.91175 13.5882 6.6425 13.8575 6.43197 14.1657C6.24513 14.4392 6.09299 14.7348 5.97903 15.0458C5.85062 15.3963 5.78802 15.7719 5.66282 16.5231Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><path d="M14.5 7L18.5 11" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>bearbeiten</button></div></div></div><div class="overflow-y-auto p-4" dir="ltr">public function __construct() {
    $this->clients = new \SplObjectStorage;
}

public function onOpen(ConnectionInterface $conn) {
    $this->clients->attach($conn);
}

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

public function onClose(ConnectionInterface $conn) {
    $this->clients->detach($conn);
}

public function onError(ConnectionInterface $conn, \Exception $e) {
    echo "Error: {$e->getMessage()}\n";
    $conn->close();
}

}

$ server = new \ ratchet \ server \ ioServer (
Neue \ ratchet \ http \ httpserver (
NEU \ RATCHET \ WebSocket \ WSServer (
Neue MyWebsocketserver ()
)
),
New \ React \ Socket \ Server ('0.0.0.0:8000', New \ react \ eventloop \ streamSelectloop ())
);

$ server-> run ();

5. Erstellen Sie einen WebSocket -Client

Das folgende Client -Beispiel implementiert eine Verbindung zum Server, das Senden von Nachrichten und das Empfangen von Antworten:

 <?php
use Ratchet\Client\WebSocket;
use Ratchet\Client\Connector;
use React\EventLoop\Factory as EventLoopFactory;
<p>require 'vendor/autoload.php';</p>
<p>$loop = EventLoopFactory::create();<br>
$connector = new Connector($loop);</p>
<p>$connector('ws://localhost:8000')->then(function(WebSocket $conn) {<br>
$conn->on('message', function($msg) use ($conn) {<br>
echo "Received: {$msg}\n";<br>
$conn->close();<br>
});</p>
<pre class="overflow-visible!"><div class="contain-inline-size rounded-2xl border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary"><div class="flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-2xl">perl</div><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-sidebar-surface-primary text-token-text-secondary dark:bg-token-main-surface-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><button class="flex gap-1 items-center select-none py-1" aria-label="Kopie"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-xs"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 5C7 3.34315 8.34315 2 10 2H19C20.6569 2 22 3.34315 22 5V14C22 15.6569 20.6569 17 19 17H17V19C17 20.6569 15.6569 22 14 22H5C3.34315 22 2 20.6569 2 19V10C2 8.34315 3.34315 7 5 7H7V5ZM9 7H14C15.6569 7 17 8.34315 17 10V15H19C19.5523 15 20 14.5523 20 14V5C20 4.44772 19.5523 4 19 4H10C9.44772 4 9 4.44772 9 5V7ZM5 9C4.44772 9 4 9.44772 4 10V19C4 19.5523 4.44772 20 5 20H14C14.5523 20 15 19.5523 15 19V10C15 9.44772 14.5523 9 14 9H5Z" fill="currentColor"></path></svg>Kopie</button><button class="flex items-center gap-1 py-1 select-none"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-xs"><path d="M2.5 5.5C4.3 5.2 5.2 4 5.5 2.5C5.8 4 6.7 5.2 8.5 5.5C6.7 5.8 5.8 7 5.5 8.5C5.2 7 4.3 5.8 2.5 5.5Z" fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M5.66282 16.5231L5.18413 19.3952C5.12203 19.7678 5.09098 19.9541 5.14876 20.0888C5.19933 20.2067 5.29328 20.3007 5.41118 20.3512C5.54589 20.409 5.73218 20.378 6.10476 20.3159L8.97693 19.8372C9.72813 19.712 10.1037 19.6494 10.4542 19.521C10.7652 19.407 11.0608 19.2549 11.3343 19.068C11.6425 18.8575 11.9118 18.5882 12.4503 18.0497L20 10.5C21.3807 9.11929 21.3807 6.88071 20 5.5C18.6193 4.11929 16.3807 4.11929 15 5.5L7.45026 13.0497C6.91175 13.5882 6.6425 13.8575 6.43197 14.1657C6.24513 14.4392 6.09299 14.7348 5.97903 15.0458C5.85062 15.3963 5.78802 15.7719 5.66282 16.5231Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><path d="M14.5 7L18.5 11" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>bearbeiten</button></div></div></div><div class="overflow-y-auto p-4" dir="ltr">$conn->send('Hello, WebSocket Server!');

}, function (\ exception $ e) verwenden ($ loop) {
echo "konnte nicht herstellen: {$ e-> getMessage ()} \ n";
$ loop-> stop ();
});

$ Loop-> run ();

6. Starten Sie den WebSocket -Service

Starten Sie den Server und den Client in der Befehlszeile:

 php server.php
php client.php

Zu diesem Zeitpunkt können der Client und der Server eine wechselseitige Kommunikation von Echtzeitdaten realisieren.

Zusammenfassen

In diesem Artikel wird die grundlegende Methode zur Verwendung von PHP zur Kombination des WebSocket-Protokolls für die Echtzeitkommunikation eingeführt und sich darauf konzentriert, die Installations- und Code-Implementierung von Ratchet-Erweiterungen zu demonstrieren. Durch das WebSocket-Protokoll können PHP-Anwendungen einen effizienten Server-Push und die Kundenreaktion erreichen und die Anforderungen der modernen Web-Echtzeit-Interaktion erfüllen.

m66.net
Praktische Tipps und Funktionsanwendungen führender Programmiersprachen – für effizientes Lernen und erfolgreiche Entwicklungsarbeit.
Programmieren lernen ist so einfach - m66.net