Websocket multi channels
Всем доброго времени суток.
Написал чат, хочу сделать отдельные комнаты, соответственно в 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(); ?> |
blvckmeister, запись "ws://localhost:8080?room=1", чтение $room = $conn->WebSocket->request->getQuery()->get('room');
|
Rise, спасибо, будем пробовать!
|
Часовой пояс GMT +3, время: 12:28. |