1°) Télécharger composer
2°) Installer composer
php composer.phar require cboden/ratchet
3°) Creer un dossier « src/ » et fichier « composer.joson » dans votre projet. nous allons tenir le tout en l’espace de noms MyApp. Votre fichier « compositeur.json » ressembler à ceci :
{ "autoload": { "psr-0": { "MyApp": "src" } }, "require": { "cboden/ratchet": "^0.3.3" } }
4°) Mettre à jour l’autoload avec composer :
$ php composer.phar dump-autoload -o
-> résultat : Generating optimized autoload files
5°) Créer un dossier src, Nous allons créer une classe Chat qui va implementer la class MessageComponentInterface, dans un fichier : « src/Chat.php »
onOpen – Appelé quand un client se connecte
onMessage – Appelé quand un message est reçu par la connexion
onClose – Appelé quand la connexion est fermée
onError – Appelé quand une erreur survient sur la connection
<?php namespace MyApp; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { // Store the new connection to send messages to later $this->clients->attach($conn); echo "New connection! ({$conn->resourceId})\n"; } public function onMessage(ConnectionInterface $from, $msg) { $numRecv = count($this->clients) - 1; echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n" , $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's'); foreach ($this->clients as $client) { if ($from !== $client) { // The sender is not the receiver, send to each client connected $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { // The connection is closed, remove it, as we can no longer send it messages $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(); }
6°) Créer un dossier bin et nous allons créer notre ficher websocket server dans ce dossier : « bin/chat-server.php »
<?php use Ratchet\Server\IoServer; use MyApp\Chat; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new Chat(), 8080 ); $server->run();
7°) tester c’est douter, mais parfois il faut douter :D, doutons
alors un ouvrez un premier terminal :
$ php bin/chat-server.php
Ouvrez une second terminal
$ telnet localhost 8080
le terminal 1 devrait vous indiquez qu’un utilisateur s’est connecté.
Ouvrez une troisième terminal
$ telnet localhost 8080
le terminal 1 devrait vous indiquez qu’un deuxième utilisateur s’est connecté.
Ecrivez un texte dans le terminal 2, vous devriez le voir apparaître dans le terminal 1 ( c’est a dire que votre serveur à bien reçu le message ), mais aussi dans le terminal 3 ce qui indique que le terminal 3 à bien reçu le message.
Voici un exemple de réalisation (by @Trizome) avec Rachet, amusez vous bien avec Shooty qui est en version Béta, ENJOY : Shooty