diff --git a/contrib/codecs/http/client.go b/contrib/codecs/http/client.go index 2f01aa93798a961877848ac33415bef57b8fb4de..a707be42aa7d56c6a842c2b6768f18873ce5f6b5 100644 --- a/contrib/codecs/http/client.go +++ b/contrib/codecs/http/client.go @@ -59,7 +59,9 @@ func Dial(ctx context.Context, client *http.Client, target string) (*Client, err if client == nil { client = http.DefaultClient } - return &Client{remote: target, c: client, headers: http.Header{}}, nil + return &Client{remote: target, c: client, headers: http.Header{ + "Content-Type": []string{"application/json"}, + }}, nil } func (c *Client) SetHeader(key string, value string) { @@ -196,6 +198,5 @@ func (c *Client) postBuf(ctx context.Context, rd io.Reader) (*http.Response, err } } }() - hreq.Header.Add("Content-Type", "application/json") return c.c.Do(hreq) } diff --git a/contrib/codecs/http/codec.go b/contrib/codecs/http/codec.go index caa126e40886f0479ab7149899d0c24d43d02914..3a8e68066cd0483a77f07e407139dad074cba402 100644 --- a/contrib/codecs/http/codec.go +++ b/contrib/codecs/http/codec.go @@ -11,6 +11,7 @@ import ( "net/http" "net/url" "strings" + "sync" "gfx.cafe/open/jrpc/pkg/codec" "gfx.cafe/open/jrpc/pkg/serverutil" @@ -29,6 +30,8 @@ type Codec struct { msgs chan *serverutil.Bundle errCh chan httpError + mu sync.Mutex + i codec.PeerInfo } diff --git a/pkg/server/responsewriter.go b/pkg/server/responsewriter.go index e23a03eeacbd46dcb94215bf66c4766400a7aa5f..404e5858664c8901e8f9da98275ab6cc4900e737 100644 --- a/pkg/server/responsewriter.go +++ b/pkg/server/responsewriter.go @@ -65,6 +65,11 @@ func (c *callRespWriter) Send(v any, e error) (err error) { if err != nil { return err } + select { + case <-c.ctx.Done(): + return c.ctx.Err() + default: + } defer c.cr.mu.Release(1) if c.err != nil { e = c.err @@ -77,7 +82,6 @@ func (c *callRespWriter) Send(v any, e error) (err error) { if v != nil { ce.v = &v } - err = c.cr.send(c.ctx, ce) if err != nil { return err