Flux de base
(À titre d'exemple, nous allons créer un serveur de chat Websocket simple)
1. Créer un répertoire de projet à n'importe quel emplacement
Par exemple SimpleChat/
Entrez dans le répertoire et exécutez composer require workerman/workerman
2. Inclure vendor/autoload.php (généré après l'installation de composer)
Créez start.php, puis incluez vendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. Choisir le protocole
Ici, nous choisissons le protocole Text (un protocole personnalisé dans Workerman, avec le format texte + nouvelle ligne)
(Actuellement, Workerman prend en charge HTTP, Websocket, et le protocole Text. Si vous avez besoin d'utiliser d'autres protocoles, veuillez vous référer à la section relative aux protocoles pour développer votre propre protocole.)
4. Écrire un script d'entrée pour démarrer, selon vos besoins
Par exemple, le fichier d'entrée suivant est pour un simple serveur de chat.
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// Lorsqu'un client se connecte, attribuer un uid, sauvegarder la connexion et informer tous les clients
function handle_connection($connection)
{
global $text_worker, $global_uid;
// Attribuer un uid à cette connexion
$connection->uid = ++$global_uid;
}
// Lorsque le client envoie un message, le transférer à tous
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] a dit: $data");
}
}
// Lorsque le client se déconnecte, diffuser à tous les clients
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] s'est déconnecté");
}
}
// Créer un Worker avec le protocole texte écoutant sur le port 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// Démarrer uniquement 1 processus, cela facilite le transfert de données entre les clients
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
5. Tester
Le protocole Text peut être testé avec la commande telnet
telnet 127.0.0.1 2347