Задать вопрос
@ikerya

WebSockets приходит неизвестный символ после переподключения одного из клиентов?

Здравствуйте. Есть два клиента, подключенных по WebSockets к серверу, если я на одном из них обновлю страницу, скрипт словит какой-то неизвестный символ, при расшифровке ничего не видно в терминале, похоже на то, что это пробел. Можете, пожалуйста, подсказать, что это может быть?

UPD: В самом фрейме данных видно, что приходит пустое сообщение.

d597604720c34ee3b0b1ee01f60f85d9.png1opEr.jpg
<?php
function sendMessage($connect, $data) {
    fwrite($connect, encode($data));
}

$socket = stream_socket_server("tcp://localhost:99", $errno, $errstr);

$connects = array();

while (true) {
    $read = $connects;
    $read[] = $socket;
    $write = $except = null;

    if (!stream_select($read, $write, $except, null)) {
        continue;
    }

    if (in_array($socket, $read)) {
        if (($connect = stream_socket_accept($socket, -1)) && $info = handshake($connect)) {
            $connects[] = $connect;
        }

        unset($read[ array_search($socket, $read) ]);
    }

    $messages_new = array();

    foreach($read as $connect) {
        $data = fread($connect, 100000);

        if (mb_strlen($data, "UTF-8") == 0) {
            fclose($connect);
            unset($connects[ array_search($connect, $connects) ]);

            continue;
        }

        $messages_new[] = array(
            "sender"  => $connect,
            "message" => decode($data)["payload"]
        );
    }

    if(count($messages_new) > 0) {
        foreach($connects as $connect) {
            $messages_to_send = array();

            foreach($messages_new as $key => $data) {
                if($data["sender"] != $connect) {
                    $messages_to_send[] = $data["message"];
                }
            }

            if(count($messages_to_send) > 0) {
                echo "\n\n--------- MESSAGE ----------\n\n";
                print_r($messages_to_send);
                echo "\n\n----------- END ------------";

                sendMessage($connect, json_encode($messages_to_send));
            }
        }
    }
}

fclose($socket);
?>
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
romy4
@romy4
Exception handler
может быть utf-8 bom
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы