Я установил связь через веб-сокет на моем сервере, в C ++. У меня проблема с протоколом websocket. Когда я получаю сообщение о рукопожатии в текстовом формате, я отвечаю на рукопожатие и отправляю обратно в текстовом формате, и соединение открывается, но при отправке второго сообщения в браузер соединение не удается.
Но если я добавлю ответ о рукопожатии в рамку первого сообщения, позже все будет нормально, у меня не возникнет проблем с другими сообщениями.
Mozzila firefox: Соединение с ws: // localhost / было прервано во время загрузки страницы.
Google chrome: сбой подключения WebSocket к ‘ws: // localhost /’: сервер не должен маскировать кадры, отправляемые клиенту.
Я не маскирую никаких кадров.
Это работает на Mozzila Firefox и Google Chrome, но не работает на сафари.
Итак, кто-нибудь знает, в чем проблема? У кого-нибудь была эта проблема?
Спасибо
Вы говорите, что не маскируете никакие кадры (от сервера к клиенту), в данных, которые вы отправляете обратно, проверьте первый бит второго байта.
В соответствии с RFC6445 первый бит второго байта (флаг маски) ДОЛЖЕН быть установлен в 0 при отправке данных клиенту. Если ваш фрейм не установлен правильно, и этот бит установлен в 1, браузер будет жаловаться на «Сервер не должен маскировать любые фреймы, которые он отправляет клиенту»
Также это может быть для вас неуместно, но убедитесь, что у вас нет завершающих данных в части кода обновления / рукопожатия, при работе с веб-сокетами наличие конечного chr (0) (нулевого символа) вызвало проблемы для меня позже когда я пытался отправить данные клиента.