http.server можно настроить с этими параметрами:
ReadTimeout, WriteTimeout,IdleTimeout and others
Я просто играл с параметрами, чтобы посмотреть, в каких случаях лучше настроить SSE, поэтому следуйте инструкциямто же самое структурировано из здесь Я просто добавляю несколько отпечатков, чтобы увидеть, когда клиенты подключаются и когда отключается, например:
....
notify := rw.(http.CloseNotifier).CloseNotify()
fmt.Fprintf(w, "data: .\n\n") `//I add this because [onopen][3] won´t` fire if nothing is sent when start conecting
fmt.Println(" conecting")
for {
select {
case <-notify:
fmt.Println("closing")
return
default:
// Write to the ResponseWriter
// Server Sent Events compatible
fmt.Fprintf(rw, "data: %s\n\n", <-messageChan)
// Flush the data immediatly instead of buffering it for later.
flusher.Flush()
}
}
Так что единственное значение, которое, если я изменил, это печатает "закрытие"WriteTimeout
, но читая эту статью , эта часть меня смущает:
Наконец, Go 1.8 вводит IdleTimeout, который ограничивает время, необходимое для поддержания активности на стороне сервера.соединение будет оставаться свободным до повторного использования
Но, как я уже сказал, даже если я изменю IdleTimeout
, клиент не закроется, потому что, когда клиент впервые подключается, я пишу в него, илиэто ошибка?Какой из трех я должен изменить тогда?Версия Go: 1.11.1