JSON RPC-Zugriff auf HTTP-Server mithilfe der Standardbibliothek
JSON RPC ist ein RPC-Protokoll, das JSON als Datenformat verwendet. Es ermöglicht Clients, mithilfe von POST-Anfragen über HTTP mit Servern zu kommunizieren. Die Standardbibliothek in Go stellt Pakete für die Implementierung von RPC-Servern bereit, es gibt jedoch derzeit keine direkte Unterstützung für JSON RPC.
Problem:
Das bereitgestellte Server-Setup verwendet den Standard Das net/rpc-Paket der Bibliothek, das von Clients erwartet, dass sie eine CONNECT-Verbindung herstellen und JSON-RPC-Anfragen über den Stream senden. Dies ist kein üblicher oder kompatibler Ansatz für webbasierte Anwendungen.
Lösung:
Die Lösung für dieses Problem besteht darin, einen benutzerdefinierten HTTP-Handler zu erstellen, der das HTTP anpasst Anfrage/Antwort an einen ServerCodec. Dadurch kann der Server JSON-RPC-Anfragen über POST-Anfragen verarbeiten:
import ( "bytes" "io" "net/http" "net/rpc" "net/rpc/jsonrpc" ) type HttpConn struct { in io.Reader out io.Writer } func (c *HttpConn) Read(p []byte) (n int, err error) { return c.in.Read(p) } func (c *HttpConn) Write(d []byte) (n int, err error) { return c.out.Write(d) } func (c *HttpConn) Close() error { return nil } http.HandleFunc("/rpc", func(w http.ResponseWriter, r *http.Request) { serverCodec := jsonrpc.NewServerCodec(&HttpConn{in: r.Body, out: w}) w.Header().Set("Content-type", "application/json") w.WriteHeader(200) server.ServeRequest(serverCodec) })
Implementierung:
Im Beispielcode-Snippet ist ein CakeBaker-Dienst beim Server registriert . Der HTTP-Handler wird dem HTTP-Server hinzugefügt und der Server überwacht Port 4321. Ein Client kann jetzt eine POST-Anfrage an „http://localhost:4321/rpc“ mit einer JSON-RPC-Anfragenutzlast senden. Der Server analysiert die Anfrage, führt die entsprechende Methode aus und gibt das Ergebnis in der Antwort zurück.
Das obige ist der detaillierte Inhalt vonWie kann ich über JSON-RPC mit der Standardbibliothek auf einen Go-HTTP-Server zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!