Comment envoyer des messages à des utilisateurs en particulier à Cliquet PHP Websocket

Je suis en train de construire un système où l'utilisateur peut s'abonner à une catégorie à l'établissement de la connexion serveur websocket et puis il va commencer à recevoir des mises à jour pour cette catégorie. Jusqu'à présent, j'ai travaillé avec Ratchet et je suis en mesure d'envoyer un message à tous les clients connectés, mais le problème est que je ne veux pas envoyer le message à tous les clients que je veux juste envoyer le message aux clients qui ont souscrit à la à la catégorie particulière dans laquelle les messages ont été envoyés.

Code PHP

Chat.php

<?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)
    {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $conn, $msg)
    {
        foreach ($this->clients as $client)
        {
            if($conn !== $client)
                $client->send($msg);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
?>

server.php

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/Ratchet/vendor/autoload.php';

$server = IoServer::factory(
  new HttpServer(
    new WsServer(
      new Chat()
    )
  ),
  8080
);

$server->run();
?>

Côté Client code js

<script type="text/javascript">
var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function(e) {
  console.log("Connection established!");
};

conn.onmessage = function(e) {
  console.log(e.data);
};
</script>

OriginalL'auteur | 2015-06-20