im ', имея в последнее время небольшую проблему с битными плавниками на основе websockets и моим c++ сервером. Всякий раз, когда я пытаюсь использовать FIN = 0, хост передает соединение без причины. Вот часть моего кода для расчета FIN:
string ret
ret += (unsigned char)((fin & 1) << 7) | (opcode & 63);
Когда я использую FIN = 1, мой первый байт в кадре равен 129, что является правильным, и пользователь получает правильный ответ. С FIN = 0 первый байт равен 1, что также кажется хорошим, а затем после отправки соединения падает. Пробовал отправлять те же пакеты данных с обоими флагами и только FIN = 0 терпит неудачу;
Почему я пытаюсь использовать FIN = 0? хорошо, я пытаюсь сделать небольшую игру three.js + websocket, я бы хотел, чтобы сервер отправлял все модели через websocket для каждого игрока, поэтому я ожидаю большую нагрузку, которую я бы хотел контролировать.
Я был бы рад предоставить любую дополнительную информацию.
Заранее спасибо.
Я понятия не имею о C++, но я немного разбираюсь в WebSockets.
Какое значение у вас есть в другом байте? Когда вы отправляете фрейм FIN = 0, вам все равно нужно отправить в него параметры фрейма. Последующие кадры должны иметь опцию "Продолжение", и больше ничего. Насколько я помню, в кадрах продолжения даже не могут быть бит RSV, отличный от 0.
Если вы отправляете фрейм с FIN = 0 без типа (текстового или двоичного), он, вероятно, сработает. Если вы отправляете FIN = 1 с типом, отличающимся от "Продолжение" после завершения FIN = 0.
Итак, ключ в том, что вы отправляете во второй байт? Кроме того, было бы здорово, если вы попытаетесь с Google Chrome и проверьте консоль, почему соединение отключено.