как обрабатывать несколько соединений сокетов одного клиента в Ratchet

Я работаю над системой чата в реальном времени, в которой один пользователь может отправлять / получать сообщения определенному пользователю. Я использую Laravel и в контроллере Я сопоставляю объект соединения с resourceId.

$ This-> соединения [$ conn-> RESOURCEID] = $ сопп;

Чтобы найти resource_Id конкретного пользователя, я сохраняю resource_Id этого пользователя в базе данных против его уникального идентификатора. Таким образом, я могу найти resource_Id пользователя с его unique_id, а затем я могу найти объект интерфейса подключения, верно.

Когда user_1 отправляет сообщение user_2, user_2 успешно получает это сообщение.

В чем моя проблема ???

Предположим, что user2 открывает вкладку, скажем tab1, и соединение создано, он успешно получает сообщение от user_1. Пользователь_2 открывает другую вкладку, после чего создается новое соединение, и теперь, если он получит сообщение, оно появится только на вкладке_2 но я хочу, чтобы он появился на обеих вкладках.

Я знаю, почему он появляется на tab_2, когда при создании второго соединения он перезаписывает уже существующий resource_id в базе данных, поскольку я сохраняю только один resource_id для каждого пользователя.

Есть ли способ, что обе вкладки обрабатываются одним и тем же объектом подключения.

У меня есть решение. Я думаю, что я должен хранить несколько идентификаторов ресурсов против user_id в базе данных, чтобы я мог получить доступ ко всем соединениям конкретного пользователя и затем отправить сообщение всем соединениям. Это правильный подход, чтобы сделать это в моем случае?

вот код функции onOpen контроллера

    function onOpen(ConnectionInterface $conn){
$this->connections[$conn->resourceId]=$conn;

$data=['action'=>'map_resource_id','resourceid'=>($conn->resourceId)];
//send the resource id to client to map this id against user_id
//the client send an ajax request to store the resource id against
//user_id
$conn->send(json_encode($data));

echo "New connection! ({$conn->resourceId})\n";
}

Код для метода onClose находится здесь

function onClose(ConnectionInterface $conn){
unset($this->connections[$conn->resourceId]);
$status=DB::update('update sockets set resource_id=0 where resource_id='.$conn->resourceId);

echo "Connection {$conn->resourceId} has disconnected\n";

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]