@Seedor

Как закрыть соединение со стороны сервера(net/http)?

Собственно, есть простенький сервер.
На стороне сервера вызывается обработчик:
....
func testFuncHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "===data test_server_msg===")
}
....


Как закрыть соединение принудительно после отправки данных клиенту(соединение конкретно этого клиента)?
(Общие таймауты не предлагать :) )
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Для HTTP/1.x можно использовать http.Hijacker https://golang.org/pkg/net/http/#Hijacker для захвата контроля. Примерно так
func testFuncHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "===data test_server_msg===")
    hj, ok := w.(http.Hijacker) //Проверка протокола на возможность Hijack
    if !ok {
		http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError)
		return
    }
    conn, _, err  := hj.Hijack() //Вот здесь захват контроля
    if err != nil {
	http.Error(w, err.Error(), http.StatusInternalServerError)
	return
    }
    conn.Close()
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Level Travel Москва
от 130 000 до 200 000 ₽
от 3 000 до 4 200 $
Digital Horizon Москва
До 220 000 ₽
12 авг. 2020, в 15:55
2000 руб./за проект
12 авг. 2020, в 15:48
3000 руб./за проект