Quantcast
Channel: y3dev
Viewing all articles
Browse latest Browse all 25

[rachet] WebSocket – installation + hello world

$
0
0

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


Viewing all articles
Browse latest Browse all 25

Trending Articles