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()