Как правильно подключать браузер к PHP-демону по WebSocket?

210
25 апреля 2017, 08:07

Начал изучать веб-сокеты... Написал сервер на PHP, который обрабатывает сообщения определённого формата. Сервер отлично работает с клиентом на C++, который просто коннектится на нужный порт localhost-а и начинает обмен данными. Но с браузером беда... Сервер пишет, что Client connected... Но браузер не просто коннектится, а сразу шлёт HTTP-заголовки с Connection Upgrade и т.д. Естественно эти заголовки сервер никак не обрабатывает, так как ждёт сообщение другого формата, и в консоли браузера я вижу отправленные заголовки и бесконечное получение ответа. Естественно ожидаемый alert("Connection established"); не появляется

Я должен вручную обрабатывать эти заголовки? Может что-то не так делаю? Как автоматизировать эту браузерную формальность upgrade-а на WS?

Answer 1

Всё, разобрался!

define('WS_GIUD', '258EAFA5-E914-47DA-95CA-C5AB0DC85B11');
define('WS_KEY_MARKER', 'Sec-WebSocket-Key: ');
...
switch ($Data[0]){
    case 'G': // GET / HTTP ...
        $KeyStart = strpos($Data, WS_KEY_MARKER); // 'Sec-WebSocket-Key: '
        if ($KeyStart){
            $KeyStart += strlen(WS_KEY_MARKER);
            $SecureKey = substr($Data, $KeyStart, strpos($Data, 0x0D0A, $KeyStart) - $KeyStart - 1);
            $Handshake = "HTTP/1.1 101 Switching Protocols\r\n"
                        ."Upgrade: websocket\r\n"
                        ."Connection: Upgrade\r\n"
                        ."Sec-WebSocket-Accept: ".base64_encode(sha1($SecureKey.WS_GIUD, true))."\r\n\r\n";
            socket_write($Socket, $Handshake);
        }
        else{
            socket_close($Socket);
            unset($Clients[$Socket_key]);
            break;
        }
        break;
READ ALSO
Как обратиться к элементу в javascript?

Как обратиться к элементу в javascript?

Можно ли в js обращаться к элементу по такой конструкции: documentgetElementById(id1 or id2 or id3) то есть при обращении указывать что нужно взять один из этих...

249
Сканер штрих кодов + веб приложение

Сканер штрих кодов + веб приложение

ЗдравствуйтеЕсть система автоматизации для аптек написанный на PHP mysql javascript и естественно HTML (вообщем браузерная)

395
Поочередное нажатие на кнопки JS

Поочередное нажатие на кнопки JS

Всем приветПодскажите пожалуйста, как можно сделать поочередное нажатие на кнопки?

299
Проблема со скриптом для формы обратной связи

Проблема со скриптом для формы обратной связи

Делаю форму обратной связи, сам скрипт и обработчик для формы нашел на просторах интернетаВот они:

233