diff --git a/client.go b/client.go
index 5ac44084380dcda2fa3b96b6e64e36469ab4b412..c431c9ad18bec48e99376959780b6759978ec3a2 100644
--- a/client.go
+++ b/client.go
@@ -467,7 +467,7 @@ func (c *Client) send(ctx context.Context, op *requestOp, msg any) error {
 func (c *Client) write(ctx context.Context, msg any, retry bool) error {
 	if c.writeConn == nil {
 		// The previous write failed. Try to establish a new connection.
-		time.Sleep(500 * time.Millisecond)
+		//	time.Sleep(500 * time.Millisecond)
 		err := c.reconnect(ctx)
 		if err != nil {
 			return err
diff --git a/websocket.go b/websocket.go
index b3b21b83b881f97de98a316caf7af37feec01dc5..67a479fd003d2f17d3f54b90a27606a32cef6c59 100644
--- a/websocket.go
+++ b/websocket.go
@@ -49,7 +49,7 @@ func (s *Server) WebsocketHandler(allowedOrigins []string) http.Handler {
 		conn, err := websocket.Accept(w, r, &websocket.AcceptOptions{
 			OriginPatterns:       allowedOrigins,
 			CompressionMode:      websocket.CompressionContextTakeover,
-			CompressionThreshold: 4096,
+			CompressionThreshold: 512,
 		})
 		if err != nil {
 			log.Debug().Err(err).Msg("WebSocket upgrade failed")
@@ -80,8 +80,8 @@ func DialWebsocketWithDialer(ctx context.Context, endpoint, origin string, opts
 		return nil, err
 	}
 	opts.HTTPHeader = header
-	return newClient(ctx, func(cctx context.Context) (ServerCodec, error) {
-		conn, resp, err := websocket.Dial(cctx, endpoint, opts)
+	return newClient(ctx, func(ctx context.Context) (ServerCodec, error) {
+		conn, resp, err := websocket.Dial(ctx, endpoint, opts)
 		if err != nil {
 			hErr := wsHandshakeError{err: err}
 			if resp != nil {
@@ -106,7 +106,7 @@ func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error
 	}
 	dialer := &websocket.DialOptions{
 		CompressionMode:      websocket.CompressionContextTakeover,
-		CompressionThreshold: 4096,
+		CompressionThreshold: 512,
 		HTTPHeader:           header,
 	}
 	return DialWebsocketWithDialer(ctx, endpoint, origin, dialer)
@@ -160,10 +160,10 @@ func heartbeat(ctx context.Context, c *websocket.Conn, d time.Duration) {
 func newWebsocketCodec(ctx context.Context, c *websocket.Conn, host string, req http.Header) ServerCodec {
 	c.SetReadLimit(wsMessageSizeLimit)
 	jsonWriter := func(v any) error {
-		return wsjson.Write(context.Background(), c, v)
+		return wsjson.Write(ctx, c, v)
 	}
 	jsonReader := func(v any) error {
-		return wsjson.Read(context.Background(), c, v)
+		return wsjson.Read(ctx, c, v)
 	}
 	conn := websocket.NetConn(ctx, c, websocket.MessageText)
 	wc := &websocketCodec{
diff --git a/wsjson/wsjson.go b/wsjson/wsjson.go
index 07c72fdf087d4db7d4b71f93b46fd7b18dbb8f6e..c8d91fe3939fbbb0c7b14a2a50a0d137c03913d2 100644
--- a/wsjson/wsjson.go
+++ b/wsjson/wsjson.go
@@ -18,7 +18,7 @@ var jzon = jsoniter.Config{
 	DisallowUnknownFields:         false,
 	TagKey:                        "",
 	OnlyTaggedField:               false,
-	ValidateJsonRawMessage:        false,
+	ValidateJsonRawMessage:        true,
 	ObjectFieldMustBeSimpleString: false,
 	CaseSensitive:                 false,
 }.Froze()