good morning!!!!

Skip to content
Snippets Groups Projects
doc.go 3.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Package jrpc provides a bottom-up JSON-RPC 2.0 implementation with HTTP-style
    // request/response semantics, designed primarily for hosting Ethereum-like JSON-RPC
    // requests but suitable for any JSON-RPC 2.0 application.
    //
    // The package follows familiar Go patterns, modeling its API after net/http with
    // Handler interfaces, ResponseWriter, and Request types. It supports multiple
    // transports including HTTP, WebSocket, and raw IO streams, with a pluggable
    // codec system for adding new transports.
    //
    // # Basic Usage
    //
    // Create a simple echo server:
    //
    //	r := jmux.NewRouter()
    //	r.HandleFunc("echo", func(w jrpc.ResponseWriter, r *jrpc.Request) {
    //	    w.Send(r.Params, nil)
    //	})
    //	http.ListenAndServe(":8080", codecs.HttpWebsocketHandler(r, []string{"*"}))
    //
    // Make client requests:
    //
    //	conn, _ := jrpc.Dial("ws://localhost:8080")
    //	defer conn.Close()
    //
    //	result, err := jrpc.Do[string](ctx, conn, "echo", "hello")
    //
    // # Core Components
    //
    // Handler Interface: The foundation of the server-side API, similar to http.Handler:
    //
    //	type Handler interface {
    //	    ServeRPC(w ResponseWriter, r *Request)
    //	}
    //
    // ResponseWriter: Used to send responses back to clients:
    //
    //	type ResponseWriter interface {
    //	    Send(v any, err error) error      // Send response
    //	    Notify(method string, v any) error // Send notification
    //	    ExtraFields() ExtraFields          // Access extra fields
    //	}
    //
    // Request: Contains the JSON-RPC request data:
    //
    //	type Request struct {
    //	    ID     *ID              // Request ID (nil for notifications)
    //	    Method string           // Method name
    //	    Params json.RawMessage  // Raw parameters
    //	    Peer   PeerInfo        // Connection information
    //	}
    //
    // # Features
    //
    // Protocol Support:
    //   - Full JSON-RPC 2.0 specification compliance
    //   - Batch request processing with configurable parallelism
    //   - Notifications (requests without IDs)
    //   - Proper error codes (-32700 to -32603)
    //   - Extra fields support for protocol extensions
    //
    // Transport Flexibility:
    //   - HTTP with GET/POST/SSE support
    //   - WebSocket for bidirectional communication
    //   - Raw IO streams (TCP, Unix sockets, etc.)
    //   - In-process communication
    //   - Pluggable codec system for custom transports
    //
    // Router and Middleware:
    //   - Chi-style method routing with pattern matching
    //   - Middleware chain support for cross-cutting concerns
    //   - Method pattern matching and routing
    //   - Context propagation throughout the stack
    //
    // Performance:
    //   - Efficient JSON handling with go-faster/jx
    //   - Buffer pooling to reduce allocations
    //   - Streaming response support
    //   - Configurable parallel batch processing
    //
    // # Error Handling
    //
    // The package provides typed errors following JSON-RPC 2.0 specification:
    //
    //	w.Send(nil, jsonrpc.InvalidParams.WithData("missing required field"))
    //	w.Send(nil, jsonrpc.MethodNotFound)
    //	w.Send(nil, jsonrpc.InternalError.WithData(err.Error()))
    //
    // Custom errors can implement the Error or DataError interfaces for
    // proper JSON-RPC error responses.
    //
    
    a's avatar
    rpc
    a committed
    package jrpc