WebSocket Когда использовать рукопожатие закрытия

Я экспериментирую с пакетом Gorilla WebSocket, и я хотел бы знать, есть ли способ, основанный на ошибке, полученной из .ReadMessage, чтобы определить, следует ли начинать рукопожатие закрытия (например, 1000 - нормальное закрытие) или немедленно остановить соединение (например, 1006 - аварийное закрытие).

В настоящее время я сохраняю список кодов ошибок, которые я могу использовать для закрытия соединения через веб-сокет, и если код ошибки равен одному из кодов в моем списке, я выполняю рукопожатие закрытия. Однако я не уверен, соответствует ли это спецификации WebSocket.

Есть ли другой способ сделать это или это то, как это должно быть сделано?


person Kim Byer    schedule 14.02.2016    source источник


Ответы (1)


Приложения должны отправлять закрытые кадры только тогда, когда приложение решает закрыть соединение. Пакет Gorilla обрабатывает все остальные случаи.

Пакет Gorilla отправляет закрывающее рукопожатие при ошибках чтения. Внутренний метод Gorilla handleProtocolError запускает завершающее рукопожатие.

Gorilla отвечает на закрывающие рукопожатия от однорангового приложения.

person Cerise Limón    schedule 14.02.2016
comment
Я взглянул на реализация ReadMessage и для меня, по крайней мере, похоже, что закрытые кадры не отправляются на подключенную конечную точку. - person Kim Byer; 14.02.2016
comment
Запуская завершающее рукопожатие, я имею в виду этот раздел WebSocket RFC - person Kim Byer; 14.02.2016
comment
Метод handleProtocolError отправляет рукопожатие закрытия. - person Cerise Limón; 14.02.2016
comment
Хорошо, это обрабатывает ошибки, когда кадр, отправляемый подключенной конечной точкой, не соответствует спецификации веб-сокета. Однако, если я разорвал соединение с кодом 1000, я несу ответственность за реализацию завершающего рукопожатия. Или я все же ошибаюсь? - person Kim Byer; 14.02.2016
comment
Если приложение решает закрыть соединение, оно должно начать рукопожатие закрытия. Gorilla запускает рукопожатие при ошибках протокола и отвечает на рукопожатие от однорангового приложения. - person Cerise Limón; 14.02.2016