Всем доброго времени суток.
Написал чат, хочу сделать отдельные комнаты, соответственно в room1 юзер должен получать сообщения тех кто отправляет их в этой комнате. К моему сожалению это не получается реализовать, сообщения приходят во все комнаты сразу, скажем так, что я не могу понять, как реализовать разные потоки/каналы, для разных комнат, конечно могу запустить для каждой комнаты свой сокет-сервер, но я думаю, что это просто бред. Прошу Вашей помощи в этом вопросе, а именно, есть какой-то вариант создания таких потоков если запущен только 1 сокет-сервер?
Скрипт чата, описанный ниже генерируется с помощью пхп, а алгоритм следующий:
1. Я кликаю на 1 из 3 комнат.
2. После клика id этой комнаты отправляется с помощью AJAX в php-обработчик, который после подключения к mysql выводит все сообщения для комнаты с переданным id.
3. Сгенерированная страница выводится в блок.
Я пробовал сделать следующее: для каждой комнаты (для каждого div, в который выводится сгенерированная страница) указывать уникальный id, но это не помогло, ведь js генерирует чат на стороне клиента, а сообщение отправляется на сервер, которому всё равно какие id я там прописал... Искал решения данной проблемы, но не нашел ничего, в голове крутится многопоточность, но нигде нет информации, научите пользоваться гуглом(
Спасибо!
Скрипт чата
var socket = new WebSocket("ws://localhost:8080");
socket.onopen = function() {
alert("Соединение установлено.");
};
socket.onclose = function(event) {
if (event.wasClean) {
alert('Соединение закрыто чисто');
} else {
alert('Обрыв соединения');
}
alert('Код: ' + event.code + ' причина: ' + event.reason);
};
socket.onmessage = function(event) {
let message = JSON.parse(event.data);
$('#listingm').append('<li class="clearfix"><div class="message-data" style="text-align:left;"><span class="message-data-name"><i class="fa fa-circle online"></i>+message.name+</span><span class="message-data-time">10:12 AM, Today</span></div><div class="message my-message">+message.msg+</div></li>');
document.getElementById('chat-history').scrollTop = 9999;
};
socket.onerror = function(error) {
alert("Ошибка " + error.message);
};
$(#sendings).click(function(){
let message = {
name: "'.$_SESSION['personaname'].'",
msg: $('#message-to-send').val()
}
socket.send(JSON.stringify(
message));
return false;
});
Сокет-сервер
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();
?>