0

Помогите разобраться с веб сокетами.

Задача организовать разные чаты между несколькими пользователями. Например чат команты 1, и чат комнаты 2

Сейчас я реализовал чат на php, но его получают все пользователи. Я реализовал, что бы на стороне клиента определялся чат и если это тот чат, то сообщение отображается у клиента. Но это же не верно. То есть клиент получает весь пакет всех сообщений всех чатов, то есть он находясь в комнате 1 получает сообщение комнаты чата 2, хотя его не видит, так как js фильтрует показывать сообщение в браузере или нет. Дайте направление в какую сторону двигаться. Спасибо

<?php
require_once ("classes/Chat.php");
define('PORT', 8090);
    $chat = new Chat(); 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
    socket_bind($socket, 0, PORT);

    socket_listen($socket);

    $clientSocketArray = array($socket);

    while(true){
        sleep(1);
        $newSocketArray = $clientSocketArray;
        $nullA = [];
        socket_select($newSocketArray,$nullA,$nullA,0,10);

        if(in_array($socket, $newSocketArray)) {
            $newSocket = socket_accept($socket);
            $clientSocketArray[] = $newSocket;
            $header = socket_read($newSocket, 1024);           
            $chat-&gt;sendHeaders($header, $newSocket, 'domen.ru/chat/index', PORT); 

            socket_getpeername($newSocket, $client_ip_address);

            $connectionACK = $chat-&gt;newConnectionACK($client_ip_address);
            $chat-&gt;send($connectionACK, $clientSocketArray);

            $newSocketArrayIndex = array_search($socket, $newSocketArray);
            unset($newSocketArray[$newSocketArrayIndex]);
        }

        foreach ($newSocketArray as $newSocketArrayResourse) {
            while (socket_recv($newSocketArrayResourse, $socketData, 1024, 0) &gt;= 1) {
                $socketMessage = $chat-&gt;unseal($socketData);
                $messageObj = json_decode($socketMessage);

                if($messageObj-&gt;chat_message == null){

                }else{
                    $chatMessage = $chat-&gt;createChatMessage($messageObj-&gt;chat_user, $messageObj-&gt;chat_message, $messageObj-&gt;name_chat);
                    $chat-&gt;send($chatMessage, $clientSocketArray);
                }   

                break 2;
            }
        }           
    }

    socket_close($socket);

?>

0 Answers0