2014-11-07 3 views
1

У меня есть сервер на PHP, который привязывается к порту и слушает сокеты. Мой сервер запускается в PHP скрипт с:Веб-узлы, не работающие в Google Chrome

$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); 

Когда сообщение HTTP поступает от клиента, сервер читает заголовок:

$header = socket_read($socket_new,1024); 

, а затем сохраняет соединение в хранилище Memcache. Это работает для большинства браузеров, включая сафари, firefox и Canary. Однако он не работает на хроме. Браузер выбрасывает сообщение об ошибке:

подключение WebSocket к 'WS: //xyz.com: 9001/chat_server.php' не удалось: Ошибка при WebSocket рукопожатия: Некорректное 'Sec-WebSocket-Accept' значение заголовка

Моя версия Chrome является: версия 38.0.2125.111 м (64-разрядная версия)

ответ

5

мы имели один и тот же вопрос, и мы могли бы решить эту проблему за счет увеличения «максимальное число байтов» параметра в socket_read (). Вы можете попробовать

socket_tead($socket_new, 2048); 

Причина в том, что заголовок websocket в хроме иногда больше 1024 байтов. Таким образом, когда ваш сервер читает 1024 байта, он не получает параметр Sec-Websocket-Key и не может генерировать допустимое значение Sec-Websocket-Accept.

Вы также можете использовать функции fsockopen() и fread() вместо функции socket_read().

+0

Благодарю вас за предложение. Он работает сейчас! –

+0

в моем случае, макс. количество байт = 5000. socket_read ($ socket_new, 5000); – Vinner

Смежные вопросы