Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie die Nachrichten-Push-Funktion mit PHP

So implementieren Sie die Nachrichten-Push-Funktion mit PHP

PHPz
PHPzOriginal
2023-04-04 10:43:062268Durchsuche

Mit der rasanten Entwicklung des Internets ist die Entwicklung von Webanwendungen immer häufiger geworden. In diesen Webanwendungen ist der Message-Push-Mechanismus zu einem wichtigen Bestandteil geworden. Der Message-Push-Mechanismus ermöglicht es uns, Nachrichten aktiv vom Backend an das Frontend zu pushen, wodurch die Interaktivität von Webanwendungen reichhaltiger, in Echtzeit erfolgen und effizienter werden kann.

Um den Message-Push-Mechanismus in PHP zu implementieren, müssen Sie die WebSocket-Technologie verwenden. WebSocket kann eine dauerhafte Verbindung herstellen, sodass der Server jederzeit Nachrichten an den Client senden kann und der Client auch Nachrichten an den Server senden kann. In PHP stehen einige hervorragende WebSocket-Bibliotheken zur Verfügung. In diesem Artikel stellen wir vor, wie Sie PHP zur Implementierung der Nachrichten-Push-Funktion verwenden.

1. Verwenden Sie die Workerman-Bibliothek, um Message Push zu implementieren.

Workerman ist ein leistungsstarkes asynchrones ereignisgesteuertes Framework, das in der PHP-Umgebung ausgeführt wird. Es wurde von Wang Pan, dem Autor des berühmten PHP-Frameworks YII, erstellt. Das Framework implementiert die Unterstützung für WebSocket durch die Verwendung von PHP-Socket-Erweiterungen und implementiert auf dieser Basis die Fähigkeit, TCP/UDP-Protokolle zu verarbeiten.

Lassen Sie uns nun die spezifischen Schritte zum Implementieren von Message Push mithilfe der Workerman-Bibliothek demonstrieren:

  1. Installieren Sie die Workerman-Bibliothek.

Verwenden Sie den folgenden Befehl in der Befehlszeile, um die Workerman-Bibliothek zu installieren:

composer require workerman/workerman
  1. Erstellen Sie einen WebSocket server

Bevor Sie einen WebSocket-Server erstellen, müssen Sie die Autoloading-Funktion in die Laufumgebung von Workerman einführen. Die Methode zur Einführung der automatischen Ladefunktion ist wie folgt:

require_once __DIR__ . '/vendor/autoload.php';

Nach der Einführung der automatischen Ladefunktion können Sie den WebSocket-Server instanziieren. Der Code lautet wie folgt:

use Workerman\Worker;
use Workerman\Lib\Timer;

$ws_worker = new Worker("websocket://0.0.0.0:2346");

//配置参数
$ws_worker->count = 4;
$ws_worker->name = 'WebSocket';

//连接事件
$ws_worker->onConnect = function($connection)
{
   echo "New connection\n";
};

//关闭事件
$ws_worker->onClose = function($connection)
{
   echo "Connection closed\n";
};

//消息事件
$ws_worker->onMessage = function($connection, $data)
{
    echo "Received: ".$data."\n";
};

Worker::runAll();

Im obigen Code instanziieren wir einen WebSocket-Server und legen die Abhöradresse und den Port fest (hier wird Port 2346 verwendet). Danach legen wir die Anzahl der Server, ihre Namen, Verbindungsereignisse, Shutdown-Ereignisse und Nachrichtenereignisse fest.

Es ist notwendig, die Anzahl der zu startenden Arbeitsprozesse anzugeben, da die Geschwindigkeit und Anzahl der Verarbeitungen zum Senden und Empfangen von Nachrichten in Echtzeit von der Anzahl der Prozesse abhängt, ob eine große Anzahl von Verbindungen unterstützt werden kann.

  1. Starten Sie den WebSocket-Server

Nachdem Sie den WebSocket-Server erstellt haben, müssen Sie den folgenden Befehl in der Befehlszeile verwenden, um den WebSocket-Server zu starten:

php websocket.php start

Danach wird der WebSocket-Server gestartet.

  1. Push-Nachrichten an den Client

Nachdem der WebSocket-Server gestartet wurde, müssen wir Nachrichten an den Client senden. Die Methode zum Übertragen einer Nachricht ist wie folgt:

foreach($ws_worker->connections as $connection)
{
    $connection->send('Welcome!');
}

Im obigen Code durchlaufen wir alle Verbindungen auf dem Server und senden ihnen eine Nachricht (die hier gesendete Nachricht lautet „Willkommen!“).

2. Verwenden Sie die Ratchet-Bibliothek, um Message Push zu implementieren.

Ratchet ist eine mit PHP entwickelte WebSocket-Bibliothek, die es PHP ermöglicht, eine bidirektionale Kommunikation in Echtzeit durchzuführen. Ratchet bietet die Implementierung eines WebSocket-Servers und eines WebSocket-Clients und seine Funktionen sind sehr leistungsstark.

Die spezifischen Schritte zur Verwendung der Ratchet-Bibliothek zum Implementieren von Message Push sind wie folgt:

  1. Installieren Sie die Ratchet-Bibliothek

Verwenden Sie den folgenden Befehl in der Befehlszeile, um die Ratchet-Bibliothek zu installieren:

composer require cboden/ratchet
  1. Erstellen Sie einen WebSocket-Server

und verwenden Sie die Workerman-Bibliothek, um Message Push zu implementieren. Wenn wir die Ratchet-Bibliothek verwenden, müssen wir auch zuerst einen WebSocket-Server erstellen. Der Code lautet wie folgt:

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

require dirname(__DIR__) . '/vendor/autoload.php';

class Pusher implements MessageComponentInterface
{
    private $clients;
 
    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
    }
 
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
    }
 
    public function onMessage(ConnectionInterface $from, $msg)
    {
        echo "New message received! ({$from->resourceId})\n";
        $numRecv = count($this->clients) - 1;
        foreach ($this->clients as $client) 
        {
            if ($from !== $client)
            {
                $client->send($msg);
            }
        }
    }
 
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
    }
 
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
 
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Pusher()
        )
    ),
    19920//端口号
);
$server->run();

Im obigen Code implementieren wir den WebSocket-Server und geben den Verbindungsstatus im onOpen()-Ereignis an den Client aus, verarbeiten den Nachrichten-Push im onMessage()-Ereignis und geben die Verbindungstrennung in aus Das Ereignis onClose() Im Ein-Zustand werden Fehlerinformationen im Ereignis onError() ausgegeben.

  1. Starten Sie den WebSocket-Server

Nachdem Sie den WebSocket-Server erstellt haben, müssen Sie den folgenden Befehl in der Befehlszeile verwenden, um den WebSocket-Server zu starten:

php websocket.php

Danach wird der WebSocket-Server gestartet.

  1. Push-Nachrichten an den Client

Nachdem der WebSocket-Server gestartet wurde, müssen wir Nachrichten an den Client senden. Die Methode zum Übertragen einer Nachricht ist wie folgt:

$this->clients->remove($conn);
foreach ($this->clients as $client) 
{
    if ($from !== $client)
    {
        $msg = $from->resourceId.":".$msg;
        $client->send($msg);
    }
}

Im obigen Code durchlaufen wir alle Verbindungen auf dem Server und senden ihnen eine Nachricht (die hier gesendete Nachricht lautet „Willkommen!“).

Beachten Sie, dass sich Push-Nachrichten in der Ratchet-Bibliothek von denen in der Workerman-Bibliothek unterscheiden. Insbesondere verwendet die Workerman-Bibliothek die $connection->send()方法,而Ratchet库使用的是$client->send()-Methode. Auch die Methoden zum Übertragen von Nachrichten unterscheiden sich zwischen den verschiedenen Bibliotheken.

3. Zusammenfassung

Das Obige ist die spezifische Methode zur Verwendung von PHP zur Implementierung des Nachrichten-Push-Mechanismus. Durch diese Methoden können wir Nachrichten proaktiv vom Backend an das Frontend weiterleiten und so eine effiziente und umfassende Interaktion mit Webanwendungen in Echtzeit erreichen. Bei der Verwendung dieser Methoden müssen wir auf die Unterschiede und Merkmale der einzelnen WebSocket-Bibliotheken achten und diese flexibel anwenden, um Push-Nachrichten zu verbessern.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Nachrichten-Push-Funktion mit PHP. 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