Heim  >  Artikel  >  Backend-Entwicklung  >  Echtzeit-Datenkommunikation mit PHP und SignalR

Echtzeit-Datenkommunikation mit PHP und SignalR

王林
王林Original
2023-06-28 09:08:221399Durchsuche

Mit der rasanten Entwicklung des mobilen Internets ist Echtzeitkommunikation nach und nach zu einem sehr wichtigen Bedürfnis geworden. Bei der Echtzeitkommunikation ist die Echtzeitdatenkommunikation die grundlegendste Anforderung. Dies erfordert, dass der Server in Echtzeit Daten an den Client senden und in Echtzeit interagieren kann.

PHP und SignalR sind zwei sehr leistungsstarke Tools, wenn es darum geht, Echtzeit-Datenkommunikation zu realisieren. PHP ist eine sehr beliebte Entwicklungssprache, mit der serverseitiger Code geschrieben werden kann, während SignalR ein Echtzeit-Kommunikationsframework ist, mit dem Echtzeit-Datenkommunikation implementiert werden kann.

In diesem Artikel stellen wir detailliert vor, wie Sie mit PHP und SignalR eine Echtzeit-Datenkommunikation erreichen. Wir stellen zunächst die Grundkonzepte und Arbeitsprinzipien von SignalR vor und stellen dann vor, wie PHP und SignalR zum Aufbau des Servers und Clients für die Echtzeit-Datenkommunikation verwendet werden. Abschließend zeigen wir anhand eines Beispiels, wie mit PHP und SignalR eine Datenkommunikation in Echtzeit erreicht werden kann.

1. Die Grundkonzepte und Arbeitsprinzipien von SignalR

SignalR ist ein Echtzeit-Kommunikationsframework, mit dem eine Echtzeit-Datenkommunikation erreicht werden kann. Es basiert auf WebSockets, Long Polling, Server-Sent Events (SSE) und anderen Technologien und kann Echtzeit-Datenkommunikation auf verschiedenen Browsern und Betriebssystemen durchführen.

SignalR funktioniert ganz einfach. Wenn der Client eine Verbindung mit dem Server herstellt, wählt SignalR automatisch die am besten geeignete Kommunikationsmethode (WebSockets, Long Polling, SSE usw.) aus und stellt eine dauerhafte Verbindung zwischen dem Server und dem Client her. Wenn der Server über neue Daten verfügt, die an den Client übertragen werden müssen, sendet SignalR die Daten automatisch an den Client und löst entsprechende Ereignisse auf dem Client aus, damit der Client die Daten verarbeiten kann.

2. Verwenden Sie PHP und SignalR, um den Server und Client für die Echtzeit-Datenkommunikation zu erstellen.

Um PHP und SignalR zum Erstellen des Servers und Clients für die Echtzeit-Datenkommunikation zu verwenden, müssen wir zuerst die SignalR-PHP-Bibliothek installieren. Sie können die PHP-Bibliothek von SignalR mithilfe von Composer installieren. Die spezifischen Schritte sind wie folgt:

  1. Composer installieren

Zuerst müssen wir Composer installieren. Composer kann in der Befehlszeile mit dem folgenden Befehl installiert werden:

curl -sS https://getcomposer.org/installer |. php

  1. Installieren Sie die PHP-Bibliothek von SignalR.

Verwenden Sie den folgenden Befehl, um die PHP-Bibliothek von SignalR zu installieren Befehlszeile:

Composer benötigt Signalwire/Signalwire

Nach der Installation der SignalR-PHP-Bibliothek können wir mit dem Schreiben von Server- und Clientcode beginnen.

Der serverseitige Code lautet wie folgt:

<?php
require __DIR__ . '/vendor/autoload.php';

use SignalWireRestClient;
use SignalWireRelayStreamRoom;

$client = new Client('YOUR_PROJECT_ID', 'YOUR_AUTH_TOKEN');
$room = new Room($client, 'YOUR_ROOM_ID');

$room->on('data', function ($data) use ($room) {
    // 处理接收到的数据
});

$room->join();

Im obigen Code erstellen wir zunächst eine Client-Instanz auf der Serverseite mithilfe der PHP-Bibliothek von SignalR. Anschließend haben wir in der Client-Instanz eine Rückruffunktion registriert, die das „Daten“-Ereignis verarbeitet. Wenn der Client die vom Server gesendeten Daten empfängt, wird die Rückruffunktion automatisch aufgerufen. Schließlich verbinden wir den Client mit dem SignalR-Raum, indem wir die Methode „join()“ aufrufen.

Der Code auf der Clientseite sieht so aus:

<!doctype html>
<html>
<head>
    <title>SignalR Example</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@signalwire/js@0.14.2/dist/signalwire.min.js"></script>
</head>
<body>

<script>
const signalwire = new window.SignalWire.WebSocketEngine({
    host: 'relay.signalwire.com',
    project: 'YOUR_PROJECT_ID',
    token: 'YOUR_AUTH_TOKEN',
    room: 'YOUR_ROOM_ID',
});

signalwire.on('ready', () => {
    // 客户端连接成功后的处理
});

signalwire.on('open', () => {
    // 客户端打开连接后的处理
});

signalwire.on('data', (data) => {
    // 处理接收到的数据
});
</script>

</body>
</html>

Im obigen Code erstellen wir zunächst eine WebSocketEngine-Instanz auf der Clientseite über die JavaScript-Bibliothek von SignalR. Anschließend haben wir einige Ereignisrückruffunktionen auf der WebSocketEngine-Instanz registriert, um verschiedene Ereignisse zu verarbeiten. Schließlich können wir Daten über die WebSocketEngine-Instanz an den Server senden.

3. Beispieldemonstration

Um zu demonstrieren, wie man mit PHP und SignalR eine Echtzeit-Datenkommunikation erreicht, können wir einen Chatroom als Beispiel nehmen. In diesem Chatroom können Benutzer einige Textnachrichten auf dem Client eingeben, und der Server leitet diese Nachrichten dann in Echtzeit an andere Clients weiter, um in Echtzeit zu interagieren.

Informationen zur spezifischen Code-Implementierung finden Sie im folgenden Beispiel:

// server.php
<?php
require __DIR__ . '/vendor/autoload.php';

use SignalWireRestClient;
use SignalWireRelayStreamRoom;

$client = new Client('YOUR_PROJECT_ID', 'YOUR_AUTH_TOKEN');
$room = new Room($client, 'YOUR_ROOM_ID');

$room->on('data', function ($data) use ($room) {
    foreach ($room->clients as $client) {
        $client->send($data);
    }
});

$room->join();
<!-- index.html -->
<!doctype html>
<html>
<head>
    <title>SignalR Example</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@signalwire/js@0.14.2/dist/signalwire.min.js"></script>
</head>
<body>

<div>
    <input type="text" id="input" />
    <button id="send">Send</button>
</div>

<div id="messages"></div>

<script>
const signalwire = new window.SignalWire.WebSocketEngine({
    host: 'relay.signalwire.com',
    project: 'YOUR_PROJECT_ID',
    token: 'YOUR_AUTH_TOKEN',
    room: 'YOUR_ROOM_ID',
});

signalwire.on('ready', () => {
    console.log('Connected to the server.');
});

signalwire.on('open', () => {
    console.log('Connection opened.');
});

signalwire.on('data', (data) => {
    $('#messages').append('<p>' + data + '</p>');
});

$('#send').on('click', () => {
    const message = $('#input').val();
    signalwire.send(message);
    $('#input').val('');
});
</script>

</body>
</html>

Im obigen Code erstellen wir zunächst einen SignalR-Raum auf dem Server. Wenn der Client eine Verbindung zum Server herstellt, tritt er diesem Raum bei. Wenn einer der Clients eine Nachricht sendet, sendet der Server diese Nachricht an die anderen Clients, um eine Echtzeitkommunikation zu erreichen.

Im Client haben wir ein Texteingabefeld und eine Schaltfläche „Senden“ erstellt. Wenn der Benutzer Text in das Texteingabefeld eingibt und auf die Schaltfläche „Senden“ klickt, wird der Text an den Server und dann an den Server gesendet sendet diesen Text zur Echtzeitkommunikation an andere Kunden.

Zusammenfassung

Es ist sehr einfach, Echtzeit-Datenkommunikation mit PHP und SignalR zu implementieren. Sie müssen lediglich die PHP-Bibliothek und die JavaScript-Bibliothek von SignalR verwenden. Bei der Implementierung der Echtzeit-Datenkommunikation können wir die Verbindung zwischen Clients über den Raum von SignalR realisieren und die Ereignisse und Rückruffunktionen von SignalR verwenden, um die Interaktion zwischen dem Server und dem Client abzuwickeln.

Das obige ist der detaillierte Inhalt vonEchtzeit-Datenkommunikation mit PHP und SignalR. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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