diff --git a/benchmark/suite_test.go b/benchmark/suite_test.go index 0e96cea2ea6d1319ad3fe71dbc4e4b0814fddc8b..2837881cd37e83254124db56100280280e404313 100644 --- a/benchmark/suite_test.go +++ b/benchmark/suite_test.go @@ -19,10 +19,10 @@ type testCase struct { } var testCases = []testCase{ - {"SingleClient", "test_ping", false}, + {"SingleClient", "small_largeResp", false}, {"SingleClientMedium", "medium_largeResp", false}, {"SingleClientLarge", "large_largeResp", false}, - {"ParallelClient", "test_ping", true}, + {"ParallelClient", "small_largeResp", true}, {"ParallelClientMedium", "medium_largeResp", true}, {"ParallelClientLarge", "large_largeResp", true}, } diff --git a/contrib/codecs/rdwr/client.go b/contrib/codecs/rdwr/client.go index 8943e8fe43e654a6ea208dfa4fbf703f695fa811..c8ab73f76ade78233a18540263efbc108775abb0 100644 --- a/contrib/codecs/rdwr/client.go +++ b/contrib/codecs/rdwr/client.go @@ -10,7 +10,6 @@ import ( "gfx.cafe/open/jrpc/pkg/clientutil" "gfx.cafe/open/jrpc/pkg/jjson" "gfx.cafe/open/jrpc/pkg/jsonrpc" - "github.com/go-faster/jx" ) type Client struct { @@ -69,11 +68,18 @@ func (c *Client) listen() error { defer func() { _ = c.Close() }() - jd := jx.GetDecoder() - defer jx.PutDecoder(jd) - jd.Reset(c.rd) + //jd := jx.GetDecoder() + //defer jx.PutDecoder(jd) + //jd.Reset(c.rd) + // for { + // msg, err := jd.RawAppend(nil) + // if err != nil { + // return err + // } + var msg json.RawMessage + dec := json.NewDecoder(bufio.NewReader(c.rd)) for { - msg, err := jd.Raw() + err := dec.Decode(&msg) if err != nil { return err } @@ -90,6 +96,10 @@ func (c *Client) listen() error { c.mu.RLock() handler = c.handler c.mu.RUnlock() + // dont run the handler if it is nil + if handler == nil { + continue + } // writer should only be allowed to send notifications // reader should contain the message above // the context is the client context diff --git a/pkg/jrpctest/server.go b/pkg/jrpctest/server.go index 656af54f281f05981e8d8586413875c03008a227..b368172da9aa3afe772b3912805c1d59a27317a8 100644 --- a/pkg/jrpctest/server.go +++ b/pkg/jrpctest/server.go @@ -5,6 +5,7 @@ import ( jmux2 "gfx.cafe/open/jrpc/contrib/jmux" "gfx.cafe/open/jrpc/contrib/middleware" + "gfx.cafe/open/jrpc/pkg/jsonrpc" ) func NewRouter() *jmux2.Mux { @@ -32,14 +33,17 @@ func NewRouter() *jmux2.Mux { if err := mux.RegisterStruct("nftest", new(notificationTestService)); err != nil { panic(err) } + mux.HandleFunc("small/largeResp", largeResp(8)) + mux.HandleFunc("medium/largeResp", largeResp(1024*4)) + mux.HandleFunc("large/largeResp", largeResp(1024*1024*5*3)) + return mux +} - if err := mux.RegisterStruct("medium", largeRespService{1024 * 4}); err != nil { - panic(err) +func largeResp(length int) jsonrpc.HandlerFunc { + str := []byte(strings.Repeat("x", length)) + return func(w jsonrpc.ResponseWriter, r *jsonrpc.Request) { + w.Send(string(str), nil) } - if err := mux.RegisterStruct("large", largeRespService{1024 * 1024 * 5 * 3}); err != nil { - panic(err) - } - return mux } func NewRouterWithMaxSize(size int) *jmux2.Mux { mux := jmux2.NewRouter()