diff --git a/graphql/handler/transport/websocket.go b/graphql/handler/transport/websocket.go index d6c174cd1fb..862562551e0 100644 --- a/graphql/handler/transport/websocket.go +++ b/graphql/handler/transport/websocket.go @@ -56,6 +56,8 @@ type ( closed bool headers http.Header + shutdownGracePeriod time.Duration + initPayload InitPayload } @@ -115,13 +117,14 @@ func (t Websocket) Do(w http.ResponseWriter, r *http.Request, exec graphql.Graph } conn := wsConnection{ - active: map[string]context.CancelFunc{}, - conn: ws, - ctx: r.Context(), - exec: exec, - me: me, - headers: r.Header, - Websocket: t, + active: map[string]context.CancelFunc{}, + conn: ws, + ctx: r.Context(), + exec: exec, + me: me, + headers: r.Header, + Websocket: t, + shutdownGracePeriod: 0 * time.Millisecond, } if !conn.init() { @@ -504,6 +507,10 @@ func (c *wsConnection) close(closeCode int, message string) { } c.closed = true c.mu.Unlock() + + if c.shutdownGracePeriod > 0 { + time.Sleep(c.shutdownGracePeriod) + } _ = c.conn.Close() if c.CloseFunc != nil {