Я написал (не очень) простой сервер веб-сокетов на python, который прослушивает порт, выполняет квитирование, а затем отправляет клиенту последовательность сообщений (с произвольным интервалом), содержащих числа.
Я написал клиент javascript и протестировал его в Chrome и Safari. Я обнаружил, что Chrome и Safari используют разные версии WebSocket. Например, Chrome использует Sec-WebSocket-Key (и ожидает Sec-WebSocket-Accept), тогда как Safari отправляет вместо Sec-WebSocket-Key1, Sec-WebSocket-Key2 и пакет из 8 байтов после заголовка.
Я реализовал на сервере функцию рукопожатия, которая определяет необходимый тип рукопожатия и выполняет его. Эта проблема решена. Веб-сокет правильно открыт в Chrome или Safari (версии OSX, Windows и IOS5).
Но у меня есть другая проблема. Очевидно, Safari отправляет и ожидает сообщения, разделенные 0x00 и 0xFF, в то время как Chrome отправляет и ожидает данные в рамке и в маске (используя более новую версию спецификации websocket).
Я хочу иметь один сервер, который адаптируется под ожидания клиента. У меня вопрос, как я могу заранее узнать, нужно ли отправлять данные в рамке или с разделением 0x00,0xFF?
Полагаю, я мог бы предположить, что, если протокол квитирования основан на Key1 и Key2, клиентом является Safari, а затем используется 0x00 0xFF для разграничения данных, тогда как если он использует Sec-WebSocket-Key, клиентом является Chrome, и затем используйте данные в рамке. Однако я не удовлетворен этим решением, так как оно не является общим. Идеи?