how to get the connection object of a specific user?

后端 未结 2 2160
隐瞒了意图╮
隐瞒了意图╮ 2020-12-15 11:48

I am working in a real time Symfony app using Ratchet library, in this app I need to send some data to a specific user so the logic solutio

2条回答
  •  無奈伤痛
    2020-12-15 12:03

    this is what I did, has some improvements on the same idea.

    adds 2 functions that you can call elsewhere: send_to() and multicast().

    namespace mine;
    use Ratchet\MessageComponentInterface;
    use Ratchet\ConnectionInterface;
    
    class ws implements MessageComponentInterface {
        protected $clients;
        protected $clientids;
    
        public function __construct() {
            $this->clients = new \SplObjectStorage; 
            $this->clientids = array();
        }
    
        public function multicast($msg) {
            foreach ($this->clients as $client) $client->send($msg);
        }
    
        public function send_to($to,$msg) {
            if (array_key_exists($to, $this->clientids)) $this->clientids[$to]->send($msg);
        }
    
        public function onOpen(ConnectionInterface $conn) {
            $socket_name = "{$conn->resourceId}@{$conn->WebSocket->request->getHeader('X-Forwarded-For')}";
            $this->clients->attach($conn,$socket_name);
            $this->clientids[$socket_name] = $conn;
        }
    
        public function onMessage(ConnectionInterface $from, $msg) {
            $this->multicast($msg);
        }
    
        public function onClose(ConnectionInterface $conn) {
            unset($this->clientids[$this->clients[$conn]]);
            $this->clients->detach($conn);
        }
    
        public function onError(ConnectionInterface $conn, \Exception $e) {
            $conn->close();
        }
    }
    

提交回复
热议问题