Maison développement back-end tutoriel php Interface API PHP : Comment utiliser les WebSockets

Interface API PHP : Comment utiliser les WebSockets

Aug 25, 2023 pm 12:30 PM
php api websockets

PHP API接口:如何使用WebSockets

PHP est un langage de script open source côté serveur couramment utilisé pour créer des sites Web et des applications Web dynamiques. Les interfaces API PHP sont généralement fournies via le protocole HTTP, mais avec les exigences croissantes des applications Web modernes, la mise à jour des données en temps réel est devenue plus importante. Cela nécessite l'utilisation de WebSockets pour une communication bidirectionnelle afin de répondre plus rapidement aux changements.

WebSockets est un nouveau type de canal de communication entre client et serveur en HTML5. Il permet une transmission de données bidirectionnelle en temps réel en maintenant une connexion pendant une longue période. Contrairement aux requêtes HTTP, les WebSockets ouvrent un socket TCP sur la connexion WebSocket au lieu d'en créer un à chaque requête. Cela signifie que les WebSockets permettent un transfert de données en temps réel plus rapide et plus simple que les requêtes HTTP.

Cet article expliquera comment utiliser l'interface API PHP pour communiquer avec WebSockets afin de mettre à jour les données dans les applications Web en temps réel.

1. Installer Ratchet
Pour utiliser WebSockets, vous devez installer Ratchet, une bibliothèque WebSocket très populaire en PHP. Vous pouvez télécharger Ratchet depuis Github et l'ajouter à votre projet, ou l'installer à l'aide de Composer.

Si vous utilisez Composer, vous pouvez exécuter la commande suivante :

1

composer require cboden/ratchet

Copier après la connexion

Cela installera automatiquement Ratchet. Une fois installé, vous pourrez créer un serveur WebSocket en utilisant sa classe WebSocket Server.

2. Créer un serveur WebSocket
À l'aide de Ratchet, vous pouvez créer un serveur WebSocket pour une communication en temps réel avec les clients. Voici un exemple de code de base du serveur WebSocket :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

use RatchetMessageComponentInterface;

use RatchetConnectionInterface;

use RatchetServerIoServer;

use RatchetWebSocketWsServer;

 

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

 

class MyWebSocket implements MessageComponentInterface

{

    public function onOpen(ConnectionInterface $conn)

    {

        // 当有新客户端连接时执行

        echo "New connection! ({$conn->resourceId})

";

    }

 

    public function onMessage(ConnectionInterface $from, $msg)

    {

        // 接收消息

        echo "Received message: {$msg}

";

     

        // 回复消息

        $from->send('Data received: ' . $msg);

    }

 

    public function onClose(ConnectionInterface $conn)

    {

        // 当客户端断开连接时执行

        echo "Connection {$conn->resourceId} has disconnected

";

    }

 

    public function onError(ConnectionInterface $conn, Exception $e)

    {

        // 当出现错误时执行

        echo "An error has occurred: {$e->getMessage()}

";

     

        $conn->close();

    }

}

 

// 创建WebSocket服务器

$server = IoServer::factory(

    new WsServer(

        new MyWebSocket()

    ),

    8080

);

 

// 启动WebSocket服务器

$server->run();

Copier après la connexion

Le code ci-dessus crée un serveur WebSocket qui peut accepter les connexions client à partir du port 8080. Il n'a pas de véritable logique métier, il imprime simplement les événements de connexion, de message et de déconnexion. Vous pouvez l'utiliser comme point de départ et personnaliser votre propre classe de serveur WebSocket selon vos besoins.

3. Le client utilise l'API WebSocket
Côté client, vous pouvez utiliser l'API WebSocket pour établir une connexion avec le serveur et envoyer et recevoir des messages. Voici l'exemple de client WebSocket le plus simple :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

var connection = new WebSocket('ws://localhost:8080');

 

connection.onopen = function () {

    console.log('WebSocket connected');

   

    // 发送消息

    connection.send('Hello, WebSocket server!');

};

 

connection.onmessage = function (event) {

    console.log('Received message: ' + event.data);

};

 

connection.onclose = function (event) {

    console.log('WebSocket connection closed with code ' + event.code + ' and reason: ' + event.reason);

};

 

connection.onerror = function (error) {

    console.log('WebSocket error: ' + error.message);

};

Copier après la connexion

Ce code tentera de se connecter au serveur WebSocket que nous venons d'écrire. Lorsqu'un événement de connexion est reçu, il envoie un message. Lorsqu'un message est reçu du serveur, il l'enregistre sur la console. Gère également les situations de fermeture de connexion et d’erreur.

4. Utilisation de WebSockets via l'interface API PHP
Voyons maintenant comment communiquer avec WebSockets à l'aide de l'interface API PHP. Vous pouvez utiliser un routeur API traditionnel pour gérer les requêtes WebSocket. Lorsqu'un client se connecte à un serveur WebSocket, vous pouvez utiliser l'interface ConnectionInterface de Ratchet WebSocket pour récupérer les informations pertinentes. Vous pouvez également utiliser ces informations pour authentifier les connexions et garantir que seuls les utilisateurs authentifiés peuvent se connecter au serveur WebSocket.

Voici l'exemple de code :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

use RatchetMessageComponentInterface;

use RatchetConnectionInterface;

use RatchetServerIoServer;

use RatchetWebSocketWsServer;

 

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

 

// 自定义WebSocket服务器类

class MyWebSocket implements MessageComponentInterface

{

    protected $clients;

 

    public function __construct()

    {

        $this->clients = new SplObjectStorage;

    }

 

    public function onOpen(ConnectionInterface $conn)

    {

        // 将新连接存储到$clients

        $this->clients->attach($conn);

     

        // 获取客户端地址

        $client_ip = $conn->remoteAddress;

     

        // 处理新连接(验证身份、发送欢迎消息等)

        // ...

    }

 

    public function onMessage(ConnectionInterface $from, $msg)

    {

        // 处理收到的消息

        // ...

    }

 

    public function onClose(ConnectionInterface $conn)

    {

        // 从$clients中删除关闭连接

        $this->clients->detach($conn);

 

        // 处理关闭连接

        // ...

    }

 

    public function onError(ConnectionInterface $conn, Exception $e)

    {

        // 处理WebSocket错误

        // ...

         

        // 关闭连接

        $conn->close();

    }

}

 

// 创建WebSocket服务器

$server = IoServer::factory(

    new WsServer(

        new MyWebSocket()

    ),

    8080

);

 

// 启动WebSocket服务器

$server->run();

Copier après la connexion

Dans la méthode onOpen, nous pouvons effectuer certains traitements, comme vérifier la connexion, envoyer un message de bienvenue au client et enregistrer la nouvelle connexion. Dans la méthode onClose, nous pouvons gérer l'événement de fermeture de la connexion, comme la suppression de la connexion de la liste et l'envoi d'une notification hors ligne à d'autres clients.

Dans la méthode onMessage, nous pouvons gérer le message envoyé par le client WebSocket. Étant donné que WebSocket est un canal de communication bidirectionnel, cela signifie que le client peut également envoyer des messages au serveur, plutôt que simplement le serveur envoyant des messages au client, ce qui améliore considérablement la capacité de l'application à envoyer et recevoir des données.

En communiquant avec WebSockets via l'interface API PHP, vous pouvez mettre à jour les données en temps réel, ce qui est d'une grande importance pour les applications en temps réel telles que les transactions en temps réel, l'envoi de messages et les applications de jeux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Date et heure de CakePHP

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Téléchargement de fichiers CakePHP

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Routage CakePHP

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

Discuter de CakePHP

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Configuration du projet CakePHP

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

Guide rapide CakePHP

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Comment configurer Visual Studio Code (VS Code) pour le développement PHP

See all articles