Есть ли способ закрыть запрос клиента в 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

Другие вопросы по тегам