Maison  >  Article  >  cadre php  >  Pratique de développement Workerman : construire un système de messagerie instantanée efficace

Pratique de développement Workerman : construire un système de messagerie instantanée efficace

PHPz
PHPzoriginal
2023-08-05 14:03:151096parcourir

Pratique de développement des travailleurs : créer un système de messagerie instantanée efficace

Introduction :
Avec le développement rapide d'Internet et la demande croissante des utilisateurs pour une communication en temps réel, les systèmes de messagerie instantanée sont devenus un domaine de développement populaire. Afin de répondre aux différents besoins de communication en temps réel, nous pouvons utiliser le framework open source PHP Workerman pour construire un système de messagerie instantanée efficace et stable. Cet article expliquera comment utiliser le framework Workerman pour développer un puissant système de messagerie instantanée et joindra des exemples de code.

  1. Installer Workerman :
    Tout d'abord, nous devons installer le framework Workerman. Exécutez la commande suivante dans le terminal pour installer Workerman :

    composer require workerman/workerman

    Une fois l'installation terminée, nous pouvons commencer à construire le système de messagerie instantanée.

  2. Créer un serveur :
    Créez un nouveau fichier PHP nommé server.php pour construire le serveur du système de messagerie instantanée. Dans le fichier server.php, nous devons écrire le code suivant :
<?php
require_once __DIR__.'/vendor/autoload.php';

use WorkermanWorker;

// 创建一个Worker监听2345端口,使用websocket协议通信
$ws_worker = new Worker("websocket://0.0.0.0:2345");

// 设置进程数
$ws_worker->count = 4;

// 当客户端连接时
$ws_worker->onConnect = function($connection){
    echo "New connection
";
};

// 当客户端发送消息时
$ws_worker->onMessage = function($connection, $data){
    foreach($connection->worker->connections as $clientConnection){
        $clientConnection->send($data);
    }
};

// 当客户端断开连接时
$ws_worker->onClose = function($connection){
    echo "Connection closed
";
};

// 运行worker
Worker::runAll();

Le code ci-dessus crée un objet Worker, écoute le port 2345 et communique en utilisant le protocole WebSocket. Lorsque le client est connecté, « Nouvelle connexion » est affiché ; lorsque le client envoie un message, le message est envoyé à tous les clients connectés ; lorsque le client est déconnecté, « Connexion fermée » est affiché. Enfin, utilisez la méthode Worker::runAll() pour exécuter le Worker.

  1. Créer un client :
    Créez un nouveau fichier PHP nommé client.php, qui est utilisé pour construire le client du système de messagerie instantanée. Dans le fichier client.php, nous devons écrire le code suivant :
<?php
require_once __DIR__.'/vendor/autoload.php';

use WorkermanWorker;
use WorkermanAutoloader;
use WorkermanConnectionAsyncTcpConnection;

$connect_list = array();

// 当用户输入消息时
function onMessage($connect)
{
    // 从终端读取用户输入的消息
    $message = trim(fgets(STDIN));
    
    // 发送消息到服务端
    $connect->send($message);
}

// 创建一个异步TCP连接到服务端
$connect = new AsyncTcpConnection('ws://127.0.0.1:2345');
$connect->onConnect = function($connection){
    echo "Connected to server
";
};
$connect->onMessage = function($connection, $data){
    echo "Received message: ".$data."
";
};
$connect->onClose = function($connection){
    echo "Disconnected from server
";
};

// 运行连接
$connect->connect();

// 将连接对象保存到连接列表中
$connect_list[] = $connect;

// 监听用户输入消息
Worker::addWorker(function(){
    readline_callback_handler_install('', function(){});
    while (true) {
        if (count($GLOBALS['connect_list']) > 0) {
            $read = array_values($GLOBALS['connect_list']);
            $write = null;
            $except = null;
            if (false === ($num_changed_streams = stream_select($read, $write, $except, 1))) {
                continue;
            } elseif ($num_changed_streams > 0) {
                foreach($read as $connect) {
                    onMessage($connect);
                }
            }
        }
    }
});
Worker::runAll();

Le code ci-dessus crée un objet AsyncTcpConnection et se connecte au port 2345 du serveur. Lorsque la connexion est réussie, « Connecté au serveur » est affiché ; lorsqu'un message envoyé par le serveur est reçu, « Message reçu : » et le contenu du message spécifique est affiché lorsque la connexion est déconnectée du serveur ; " est affiché. Dans le même temps, le message saisi par l'utilisateur est surveillé et envoyé au serveur via l'objet de connexion.

  1. Exécutez le système de messagerie instantanée :
    Dans le terminal, exécutez les commandes suivantes pour démarrer respectivement le serveur et le client :

    php server.php
    php client.php

    Après l'exécution, le serveur et le client entreront en état d'écoute et pourront s'envoyer des messages. . Lorsque le serveur reçoit un message envoyé par un client, il diffuse le message à tous les clients connectés.

Résumé :
Dans cet article, nous avons présenté comment utiliser Workerman pour développer un système de messagerie instantanée efficace. En construisant le serveur et le client et en écrivant le code correspondant, nous pouvons réaliser des fonctions de communication en temps réel. Workerman fournit un ensemble complet d'API et de fonctions, nous permettant de créer facilement un puissant système de messagerie instantanée. J'espère que cet article vous sera utile, merci d'avoir lu !

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