Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie die WebSocket-API in PHP, um Echtzeit-Webanwendungen zu implementieren

So verwenden Sie die WebSocket-API in PHP, um Echtzeit-Webanwendungen zu implementieren

王林
王林Original
2023-06-17 13:04:401492Durchsuche

Mit der Entwicklung der Internet-Technologie sind Echtzeit-Webanwendungen zu einer immer beliebter werdenden Entwicklungsmethode geworden. WebSocket ist als Vollduplex-Kommunikationsprotokoll zu einer wichtigen Methode zur Implementierung von Echtzeit-Webanwendungen geworden. PHP bietet außerdem eine WebSocket-API, um die Verwendung durch Entwickler zu erleichtern. In diesem Artikel wird erläutert, wie Sie die WebSocket-API in PHP verwenden, um Echtzeit-Webanwendungen zu implementieren.

1. WebSocket-Übersicht

WebSocket ist ein Protokoll, das Vollduplex-Kommunikation über eine einzige TCP-Verbindung ermöglicht. Es ermöglicht Webanwendungen, Echtzeitdaten zwischen dem Client und dem Server zu kommunizieren. Im Vergleich zum HTTP-Protokoll weist WebSocket eine geringere Latenz und weniger Handshakes bei der Datenübertragung auf, was mehr Echtzeit-Webanwendungen ermöglicht.

2. Verwenden Sie die WebSocket-API in PHP, um Echtzeit-Webanwendungen zu implementieren.

  1. Installieren Sie WebSocket Im Folgenden finden Sie einen einfachen PHP-WebSocket-Dienstcode:
  2. composer require react/socket:^1.11.0 react/event-loop:^1.1.0
Dieser Code erstellt einen WebSocket-Dienst, der den 8080-Port des lokalen Computers überwacht. Wenn ein Client eine Verbindung herstellt, speichern Sie das Clientobjekt in einem SplObjectStorage-Objekt. Wenn eine Datenübertragung stattfindet, übertragen Sie die Daten an andere Clients außer dem Absender. Wenn der Client die Verbindung trennt, löschen Sie das Clientobjekt aus SplObjectStorage.

    Führen Sie den WebSocket-Dienst aus.
Speichern Sie den obigen Code als server.php-Datei und führen Sie den Befehl php server.php aus, um den WebSocket-Dienst zu starten. Zu diesem Zeitpunkt läuft der WebSocket-Dienst bereits auf dem lokalen Port 8080 und kann Client-Verbindungen akzeptieren.

    Erstellen Sie einen WebSocket-Client

      Das Folgende ist ein einfacher PHP-WebSocket-Client-Code:
    1. use ReactSocketConnectionInterface;
      use ReactSocketServer;
      
      require __DIR__ . '/vendor/autoload.php';
      
      $loop = ReactEventLoopFactory::create();
      $socket = new Server('localhost:8080', $loop);
      
      $clients = new SplObjectStorage();
      $socket->on('connection', function (ConnectionInterface $conn) use ($clients) {
          $clients->attach($conn);
          $conn->on('data', function ($data) use ($clients, $conn) {
              foreach ($clients as $client) {
                  if ($conn !== $client) {
                      $client->write($data);
                  }
              }
          });
          $conn->on('close', function () use ($clients, $conn) {
              $clients->detach($conn);
          });
      });
      
      $loop->run();
    2. Dieser Code erstellt einen WebSocket-Client und stellt eine Verbindung zum 8080-Port des lokalen Computers her. Bei einer Datenübertragung werden die Daten an die Konsole ausgegeben. Übertragen Sie beim Lesen der Konsoleneingabe die Eingabe an den WebSocket-Server.

      Führen Sie den WebSocket-Client ausserver.php文件,运行命令php server.php启动WebSocket服务。此时,WebSocket服务已经在本机的8080端口上运行,并且可以接受客户端连接。

      1. 创建WebSocket客户端

      下面是一个简单的PHP WebSocket客户端代码:

      use ReactEventLoopFactory;
      use ReactSocketConnector;
      use ReactSocketConnectionInterface;
      
      require __DIR__ . '/vendor/autoload.php';
      
      $loop = Factory::create();
      $connector = new Connector($loop);
      
      $connector->connect('tcp://127.0.0.1:8080')->then(function (ConnectionInterface $conn) use ($loop) {
          $conn->on('data', function ($data) {
              echo $data;
          });
          $loop->addReadStream(STDIN, function () use ($conn) {
              $line = fgets(STDIN);
              $conn->write($line);
          });
      }, function (Exception $e) {
          echo 'Could not connect: ' . $e->getMessage() . PHP_EOL;
      });
      
      $loop->run();

      该代码创建了一个WebSocket客户端,连接到本机的8080端口。当有数据传输时,将数据输出到控制台上。当读取控制台输入时,将输入传输给WebSocket服务端。

      1. 运行WebSocket客户端

      保存上述代码为client.php文件,运行命令php client.php启动WebSocket客户端。此时,WebSocket客户端已经连接到本机的WebSocket服务器。

      1. 测试WebSocket通信

      在控制台中输入数据,数据将会被发送给WebSocket服务端,服务端将数据回传给除发送者外的其他客户端。我们可以打开多个控制台运行php client.php

      Speichern Sie den obigen Code als client.php-Datei und führen Sie den Befehl php client.php aus Starten Sie den WebSocket-Client. Zu diesem Zeitpunkt hat der WebSocket-Client eine Verbindung zum lokalen WebSocket-Server hergestellt.

        WebSocket-Kommunikation testen

        🎜🎜Geben Sie Daten in die Konsole ein. Die Daten werden an den WebSocket-Server gesendet und der Server sendet die Daten an andere Clients außer dem Absender zurück. Wir können mehrere Konsolen öffnen und php client.php ausführen, um den Echtzeit-Kommunikationseffekt zu testen. 🎜🎜3. Zusammenfassung🎜🎜Die WebSocket-API bietet PHP eine Möglichkeit, WebSocket zu implementieren, mit dem problemlos Echtzeit-Webanwendungen implementiert werden können. In diesem Artikel wird erläutert, wie Sie die WebSocket-API in PHP zum Implementieren von Echtzeit-Webanwendungen verwenden. Er bietet einen Überblick über WebSocket, das Erstellen eines WebSocket-Dienstes, das Erstellen eines WebSocket-Clients und das Testen der WebSocket-Kommunikation. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die WebSocket-API in PHP, um Echtzeit-Webanwendungen zu implementieren. 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