Есть ли способ закрыть запрос клиента в golang/gin?
Используя джин- фреймворк.
Есть ли способ уведомить клиента о закрытии соединения с запросом, тогда обработчик сервера может выполнять какие-либо фоновые задания, не давая клиентам ждать подключения?
func Test(c *gin.Context) {
c.String(200, "ok")
// close client request, then do some jobs, for example sync data with remote server.
//
}
1 ответ
Решение
Да, вы можете сделать это. Просто возвращаясь из обработчика. И фоновую работу, которую вы хотите сделать, вы должны поместить это в новую программу.
Обратите внимание, что соединение и / или запрос могут быть возвращены в пул, но это не имеет значения, клиент увидит, что обработка запроса завершена. Вы достигаете того, чего хотите.
Что-то вроде этого:
func Test(c *gin.Context) {
c.String(200, "ok")
// By returning from this function, response will be sent to the client
// and the connection to the client will be closed
// Started goroutine will live on, of course:
go func() {
// This function will continue to execute...
}()
}
Также см.: выполнение Goroutine внутри обработчика http