Страница 2 из 2

Re: Организация мгновенного чата

Добавлено: 2013.01.15, 21:26
Nafania
anagamin писал(а):А вот за экстеншн спасибо - как раз в соседней теме спрашивал, как организовать связь с yii)
Подпишитесь на рсс, будете в курсе новинок.

Re: Организация мгновенного чата

Добавлено: 2018.12.27, 13:53
serega_chem
Прошел официальный туториал php/rabbitmq. Для закрепления материала хочу написать чат с использование websockets. В качестве сервера намереваюсь использовать Workerman.
Логика пока такая:
1. Сообщения попадают в общий exchange (с типом direct). Где routing key - id пользователя
2. При коннекте юзера создаётся очередь и присоединяется к обменнику по тому же id пользователя
Для обработки множества очередей набросал следующий класс

Код: Выделить всё

use PhpAmqpLib\Connection\AMQPStreamConnection;

class MessageConsumer
{
    private $channel;
    private $exchange = "message";
    
    public function __construct()
    {
        $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
        $this->channel = $connection->channel();
    }

    public function listen()
    {
        $this->channel->exchange_declare($this->exchange, 'direct', false, true, false);
        while (true) {
            $this->channel->wait();
        }
    }

    public function addQueue($queue)
    {
        $this->channel->queue_declare($queue, false, false, false, false);
        $this->channel->queue_bind($queue, $this->exchange, $queue);
        $this->channel->basic_consume($queue, '', false, true, false, false, [$this, 'processMessage']);
    }

    public function processMessage($msg)
    {
        echo "[x] {$msg->delivery_info['routing_key']} : $msg->body \n";
    }
}

Теперь можно написать и запустить демона

Код: Выделить всё


use MessageConsumer;

$consumer = new MessageConsumer();
$consumer->addQueue('admin');
$consumer->addQueue('user');
$consumer->listen();

Тут же возникает вопросы:
1. Как и где хранить экземпляр класса MessageConsumer? Скорее экземпляр AMQPChannel текущего соединения
2. Как восстановить работу чата при падении демона? обрыве соединения?

Re: Организация мгновенного чата

Добавлено: 2018.12.27, 14:00
serega_chem
По второму вопросу:
Если известны все пользователи, что находятся онлайн, то это не проблема. Создаем или берём существующий канал и добавляем нужные нам очереди

Re: Организация мгновенного чата

Добавлено: 2019.02.28, 22:55
german.igortcev
Socket.io