Есть ли способ закрыть клиентский запрос в golang/gin?

Использование фреймворка gin.

Есть ли способ уведомить клиента о закрытии соединения запроса, тогда обработчик сервера может выполнять любые фоновые задания, не позволяя клиентам ждать соединения?

func Test(c *gin.Context) {
        c.String(200, "ok")
        // close client request, then do some jobs, for example sync data with remote server.
        //
}

person fannheyward    schedule 09.09.2015    source источник


Ответы (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... 
    }()
}

См. также: https://stackoverflow.com/questions/31116870/goroutine-execution-inside-an-http-handler

person icza    schedule 09.09.2015