2015-09-09 2 views
2

Использование gin рамки.Есть ли все-таки, чтобы закрыть запрос клиента в 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. 
     // 
} 

ответ

4

Да, вы можете это сделать. Просто возвращаясь из обработчика. И фоновая работа, которую вы хотите сделать, вы должны поместить ее в новую версию goroutine.

Обратите внимание, что соединение и/или запрос могут быть возвращены в пул, но это не имеет значения, клиент увидит, что обслуживание запроса завершено. Вы достигаете того, чего хотите.

Что-то вроде этого:

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 execution inside an http handler