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
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous voulez une syntaxe pour l'envoi de données vers le WebSocket, je vous conseille d'utiliser un objet JSON pour ce faire. Dans votre WebSocket classe vous avez besoin d'une variable locale appelée
subscriptions
et une variable locale appeléeusers
comme si.Le javascript pour aller avec ça ressemble un peu à ce
Remarque: Ce code n'est pas testé je l'ai écrit à la volée à partir de mon expérience avec la clé à Cliquet. Bonne chance 🙂
ce que vous utilisez pour vous connecter à la websocket? Êtes-vous l'utilisation de proxy à travers nginx ou quelque chose?
Je suis aide à Cliquet avec Poussoir à partir de cet exemple, lien
OriginalL'auteur MarshallOfSound
user3049006 j'ai trouvé ce code dans mes recherches pour conserver la connexion persistante si échec de réessayer à nouveau la connexion.
OriginalL'auteur Rodrigo Santana