Wie zum senden von Nachrichten an bestimmte Benutzer Ratchet PHP Websocket

Ich versuche, ein system zu erstellen, wo Benutzer abonnieren kann, um eine Kategorie, auf der Verbindung zum websocket-server und dann wird er beginnen die updates für die Kategorie. Bisher habe ich mich mit Ratsche und ich bin in der Lage, senden Sie die Nachricht an alle angeschlossenen clients, aber das problem ist, ich will nicht senden Sie die Nachricht an alle Klienten, die ich nur wollen, senden Sie die Nachricht an die clients, die sich angemeldet haben die Kategorie, in der die Nachrichten gesendet wurde.

PHP-Code

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();
?>

Client-Seite in js-code

<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>
InformationsquelleAutor | 2015-06-20
Schreibe einen Kommentar