diff --git a/benchmark/suite_test.go b/benchmark/suite_test.go
index 4f53906c9b11e99d6146370f0b8444377a0d3318..ba689c238689e41e53cb86bb4c8ff8cd7333e590 100644
--- a/benchmark/suite_test.go
+++ b/benchmark/suite_test.go
@@ -2,6 +2,7 @@ package benchmark
 
 import (
 	"context"
+	"sync"
 	"testing"
 
 	"gfx.cafe/open/jrpc/contrib/codecs/http"
@@ -11,53 +12,74 @@ import (
 	"gfx.cafe/open/jrpc/pkg/jsonrpc"
 )
 
-func TestBenchmarkSuite(t *testing.T) {
-	var executeTest = jrpctest.TestExecutor(rdwr.ServerMaker)
-	var makeTest = func(name string, fm jrpctest.TestContext) {
-		t.Run(name, func(t *testing.T) {
-			executeTest(t, fm)
-		})
+type testCase struct {
+	name     string
+	method   string
+	parallel bool
+}
+
+var testCases = []testCase{
+	{"SingleClient", "test_ping", false},
+	{"SingleClientLarge", "large_largeResp", false},
+	{"ParallelClient", "test_ping", true},
+	{"ParallelClientLarge", "large_largeResp", true},
+}
+
+func runTestCase(ctx context.Context, client jsonrpc.Conn, method string, parallel bool) error {
+	if !parallel {
+		return client.Do(ctx, nil, method, nil)
+	}
+	var wg sync.WaitGroup
+	errs := make(chan error, 10)
+
+	for i := 0; i < 10; i++ {
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+			if err := client.Do(ctx, nil, method, nil); err != nil {
+				errs <- err
+			}
+		}()
+	}
+	wg.Wait()
+	close(errs)
+
+	for err := range errs {
+		return err // Return first error encountered
 	}
+	return nil
+}
 
+func TestBenchmarkSuite(t *testing.T) {
+	executeTest := jrpctest.TestExecutor(rdwr.ServerMaker)
 	ctx := context.Background()
-	makeTest("SingleClient", func(t *testing.T, h jsonrpc.Handler, client jsonrpc.Conn) {
-		err := client.Do(ctx, nil, "test_ping", nil)
-		if err != nil {
-			t.Error(err)
-		}
-	})
-	makeTest("SingleClientLarge", func(t *testing.T, h jsonrpc.Handler, client jsonrpc.Conn) {
-		err := client.Do(ctx, nil, "large_largeResp", nil)
-		if err != nil {
-			t.Error(err)
-		}
-	})
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			executeTest(t, func(t *testing.T, h jsonrpc.Handler, client jsonrpc.Conn) {
+				if err := runTestCase(ctx, client, tc.method, tc.parallel); err != nil {
+					t.Error(err)
+				}
+			})
+		})
+	}
 }
 
 func runBenchmarkSuite(b *testing.B, sm jrpctest.ServerMaker) {
 	ctx := context.Background()
 	executeBench := jrpctest.BenchExecutor(sm)
-	var makeBench = func(name string, fm jrpctest.BenchContext) {
-		b.Run(name, func(b *testing.B) {
-			executeBench(b, fm)
+
+	for _, tc := range testCases {
+		b.Run(tc.name, func(b *testing.B) {
+			executeBench(b, func(b *testing.B, h jsonrpc.Handler, client jsonrpc.Conn) {
+				for i := 0; i < b.N; i++ {
+					if err := runTestCase(ctx, client, tc.method, tc.parallel); err != nil {
+						panic(err)
+					}
+				}
+			})
 		})
 	}
-	makeBench("SingleClient", func(b *testing.B, h jsonrpc.Handler, client jsonrpc.Conn) {
-		for i := 0; i < b.N; i++ {
-			err := client.Do(ctx, nil, "test_ping", nil)
-			if err != nil {
-				panic(err)
-			}
-		}
-	})
-	makeBench("SingleClientLarge", func(b *testing.B, h jsonrpc.Handler, client jsonrpc.Conn) {
-		for i := 0; i < b.N; i++ {
-			err := client.Do(ctx, nil, "large_largeResp", nil)
-			if err != nil {
-				panic(err)
-			}
-		}
-	})
 }
 
 func BenchmarkSimpleSuite(b *testing.B) {
@@ -72,5 +94,4 @@ func BenchmarkSimpleSuite(b *testing.B) {
 			runBenchmarkSuite(b, v)
 		})
 	}
-
 }
diff --git a/pkg/jjson/json.go b/pkg/jjson/json.go
index fe3043f8c6ec66d71352736bc31ca32efe8374cb..5181392a6a953254fbb7e5324af4d02b57f81385 100644
--- a/pkg/jjson/json.go
+++ b/pkg/jjson/json.go
@@ -17,6 +17,9 @@ var jConfig = jsoniter.Config{
 	SortMapKeys:            true,
 }.Froze()
 
+func ReadFromStream(w io.Reader) ([]byte, error) {
+}
+
 func MarshalAndEncode(w io.Writer, v any) error {
 	d := bytebufferpool.Get()
 	defer bytebufferpool.Put(d)