Heim > Backend-Entwicklung > Golang > Wie kann ich über JSON-RPC mit der Standardbibliothek auf einen Go-HTTP-Server zugreifen?

Wie kann ich über JSON-RPC mit der Standardbibliothek auf einen Go-HTTP-Server zugreifen?

Linda Hamilton
Freigeben: 2024-11-21 08:47:10
Original
655 Leute haben es durchsucht

How Can I Access a Go HTTP Server Using JSON-RPC with the Standard Library?

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)
})
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage